elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Java [Guía] Patrones de diseño - Parte 1


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 63
1  Foros Generales / Foro Libre / Re: Israel amenaza con devolver El Líbano ‘a la Edad de Piedra’ en: 15 Diciembre 2017, 22:37
El ser humano no está preparado para la ciencia.
2  Foros Generales / Foro Libre / Re: 2018 James Cameron por fin se ha decidido en: 12 Diciembre 2017, 01:10
Pues como hagan como con Dragon Ball Evolution , menudo fiasco van a hacer.
(me da asco nauseabundo ya solo tener que nombrarlo)
3  Foros Generales / Foro Libre / Re: Un asteroide pasará en diciembre muy cerca de la Tierra en: 1 Diciembre 2017, 23:21
yo creo que es más probable que el planeta y la vida en la Tierra sea destruido por nosotros mismo antes que por un asteroide.
4  Programación / .NET / Re: 7 Zip Extraer en: 1 Diciembre 2017, 22:59
Entonces, si quieres extraer archivos ISO y RAR tienes que usar 7z.exe (no 7za.exe). También puedes usar la herramienta command-line unrar.exe (incluida en WinRAR) para la extracción de archivos RAR.

Pues mira no sabía que con 7za.exe no se podía descomprimir ISO. Siempre he usado 7z.exe, el que me descargué hace un tiempo. Pero nunca traté de descomprimir ISO. Tampoco ahora con 7za.exe para el ejemplo, pero como @rigorvzla lo puso en su código, di por hecho que se debía poder y lo puse en los filtros del cuadro abrir.

Efectivamente no se puede con 7za.exe y si con 7z.exe, lo acabo de testar.
5  Programación / .NET / Re: 7 Zip Extraer en: 1 Diciembre 2017, 06:29
Mira esto

https://sevenzip.osdn.jp/chm/cmdline/commands/extract.htm

https://sevenzip.osdn.jp/chm/cmdline/commands/extract_full.htm


Lo que no entiendo es como por ti mismo no has sabido resolver el problema
Código
  1. p.Arguments = "a " + pathDestination + targetName + " @listfile.lst" + " -t7z -mx" + mx;
  2.  

Debes recordar que 7za.exe cuando se usa un directorio no sabe interpretar espacios por ejemplo "C:\Nueva Carpeta", este directorio no sería encontrado y se deben usar las dobles comillas. Por ello en C# debes usar   \" antes y al final del directorio completo que representa la doble comilla [ " ]
Ej.:
Código
  1. string pathName = ofd.FileName;  //devuelve C:\\Nueva Carpeta

Esto se pondría de la siguiente manera
Código:
"a " + "\"" + pathName  + "\"" + ...

y equivale a:
Código:
a "C:\Nueva Carpeta"


DESCOMPRIMIR
En cuanto a descomprimir, a estas alturas ya deberías saber como va esto.

Lo primero el código que expones es para comprimir, como ya sabrás y los comandos a usar son de diferente manera. Además en el otro hilo ya te expuse todos los comandos de 7za.exe, y dice claramente usar e o x para descomprimir. La diferencia es que el segundo  crea las carpetas que contenga el archivo comprimido. Es decir los directorios completos comprimidos.

La forma
Una forma de hacerlo sería esta.

(En WPF  y C#)

Código
  1. using System.Windows;
  2. using Microsoft.Win32; //Necesario para el uso de OpenFileDialog
  3. using System.Diagnostics; //Necesario para el uso de ProcessStartInfo y Precess
  4. namespace WpfApplication1
  5. {
  6.    /// <summary>
  7.    /// Lógica de interacción para MainWindow.xaml
  8.    /// </summary>
  9.    public partial class MainWindow : Window
  10.    {
  11.        public MainWindow()
  12.        {
  13.            InitializeComponent();
  14.        }
  15.  
  16.        private void Button_Click_1(object sender, RoutedEventArgs e)
  17.        {
  18.            OpenFileDialog ofd = new OpenFileDialog();
  19.  
  20.            ofd.Title = "Archivos a descomprimir";
  21.            ofd.Filter = "Zip file|*.zip; *.7z;*.iso";
  22.            ofd.Multiselect = true;
  23.            if ((ofd.ShowDialog() == true))
  24.            {              
  25.  
  26.                string zipName = ofd.FileName;
  27.                //Carpeta de destino
  28.                string pathDestination = "Unzip\\";
  29.                string typeFiles = "*.*";  //aquí el tipo de archivos a descomprimir ej: "*.exe"; [*.* = all files]
  30.                ProcessStartInfo p = new ProcessStartInfo();
  31.                p.FileName = "7za.exe";
  32.  
  33.                //e archive.zip -oc:\soft *.cpp -r
  34.                //e ARCHIVO_ZIP -oDIRECTORIO_DESTINO TIPO_DE_ARCHIVOS_A_DESCOMPRIMIR
  35.                //-r subdirectorios recurrentes
  36.                //-y Sobrescribe los archivos si ya existen
  37.                // \" equivale a "
  38.  
  39.                // e Extrae todo en un mismo directorio (sin carpetas)        
  40.                //p.Arguments = "e " + "\"" + zipName + "\"" + " -o" + "\"" + pathDestination + "\" " + typeFiles + " -r";
  41.  
  42.                //x  Extre todo con directorios completos (con subcarpetas)
  43.                p.Arguments = "x " + "\"" + zipName + "\"" + " -o" + "\"" +
  44.                pathDestination + "\" " + typeFiles + " -r -y";
  45.                p.WindowStyle = ProcessWindowStyle.Hidden;
  46.                Process x = Process.Start(p);
  47.                x.WaitForExit();  
  48.            } //if
  49.        }
  50.    }
  51. }
  52.  
  53.  

Nótese la variable
Código
  1. string pathDestination = "Unzip\\";
  2.  

Esto crea una carpeta y ahí descomprime el archivo. Lo suyo es crear un botón y mostrar un cuadro de diálogo para seleccionar un directorio de destino, o al menos la opción de seleccionarlo. El cual se introduciría en la variable pathDestination .

Nótese también el uso de filtros en el cuadro de diálogo para permitir seleccionar solamente archivos zip, 7z y iso.

Código
  1. ofd.Filter = "Zip file|*.zip; *.7z;*.iso";
  2.  


Fíjate en el uso de -y
Esto es el equivalente a responder YES

Resulta que al ocultar la ventana de consola no ves que cuando los archivos que vas a descomprimir ya existen en el directorio de destino, 7za.exe te pregunta si quieres sobrescribir y debes responder.

Código:
(Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename all / (Q)uit?

Para evitarlo se usa  -y



Da la sensación que no entiendes los códigos y te limitas a hacer copias y pegas de códigos completos que sabes que hacen esto o aquello. Si entiendes el código simplemente modificas cuatro cosa y punto.

Debes practicar las cosas por separado. El manejo de cuadros de diálogo por ejemplo. Y en el caso de 7za.exe, en lugar de ponerte a intentar usar comandos desde NET, primero prueba a hacerlo desde un archivo CMD o BAT y pones...

Código:
7za.exe e prueba.zip  -oD:\Unzip *.exe -r
pause

[dentro de Prueba.zip]
- demo.exe
- prueba.txt
- \mi carpeta\demo2.exe

o pones...
Código:
7za.exe x prueba.zip -oD:\Unzip *.* -r
pause

Con "pause" evitas que la consola se cierre automáticamente y puedas leer si hubo algún tipo de error, el cual podrás corregir.

Una vez tengas claro como usar los comandos lo aplicas desde NET.


Una forma equivalente a usar un archivo cmd o bat desde NET es ejecutar la clase process usando cmd en lugar del Shell del sistema operativo. Y pausar la ventana de consola para ver la información.


Código
  1.                p.Arguments = "/K 7za.exe  x " + "\"" + zipName + "\"" + " -o" + "\"" +
  2.                pathDestination + "\" " + typeFiles + " -r";
  3.                p.UseShellExecute = false; //no usar el shell del sistema operativo
  4.                p.FileName = "cmd"; //usar cmd.exe
  5.                p.WindowStyle = ProcessWindowStyle.Normal ;
  6.  
  7.  

6  Foros Generales / Foro Libre / Re: Me estoy quedando calvo!!! en: 30 Noviembre 2017, 01:52
Mi consejo es que si no tienes novia las busques ¡¡Ya!!

Que folles 'hagas el amor' todo lo que puedas y más (con sexo consentido claro está)

Por mucho que digan que a las mujeres no les importa, que lo importante es el interior. No te crear ni una palabra. El pelo les importa y mucho. Vamos que ahora de 20 chicas te ligas 8, por decir una cantidad, calvo ligarás con 2. Es un hecho demostrado.

La razón es que la calvicie se asocia a la vejez o enfermedad. Instintivamente produce rechazo. Claro si eres físicamente guapo y muy atractivo eso puede compensar..., pero si no, lo tienes crudo para comerte un rosco.

Lo típico que suelen decir es poner ejemplos de mujeres que están con hombres calvos. Vamos a ver, posiblemente cuando le conoció, se enamoró y se comprometió con él, tenía pelo pero luego lo fue perdiendo. Entonces ella lo va aceptado y no lo va ha dejar por haberse quedado calvo. Pero lo cierto es que si de entrada lo hubiera visto en una discoteca ya siendo calvo, le hubiera ignorado o seguramente a él le hubiera costado el doble o el triple conseguir seducirla, hasta conseguir su atención. Es decir, no es imposible, pero si es mucho más difícil, porque lo primero en lo que uno/a se fija es en el físico.

Claro, si tiramos de estadísticas habrán mujeres que incluso tenga preferencias por hombres calvos, para gustos colores, pero son una excepción.

Y muy importante no confundir calvo con rapado. No es lo mismo calvo a lo Danny DeVito que da un aspecto como de viejo.


Que calvo a lo Bruce Willis o Jason Stathan




Rapado se disimula en cierto modo la calvicie y da un aspecto más viril y masculino, cosa que parece ser gusta a muchas mujeres. Obvio si estás forrado y/o eres famoso según como pues da igual si eres feo, gordo y calvo, ligar ligas. Si eres atractivo pues ya ni te cuento.

Se han hecho estudios que dicen que las mujeres ven a los hombres calvos más poderosos y fuertes. Pero lo que no dicen es que también suelen interpretarse como más agresivos y duros. Lo cual visto desde una mujer no es nada positivo, más bien al contrario.

Un hombre con pelo frondoso y bonito, es interpretado como un síntoma de juventud y salud. Una mujer preferirá aparearse con un hombre que aparente ser saludable, que tenga buenos genes, para que la progenie herede dichos genes y por lo tanto tenga más probabilidades de sobrevivir.

Sin embargo hay otra interpretación a favor de los calvos (asociados a la masculinidad, el liderazgo y como tipos duros) en el sentido que las mujeres preferirán a éstos por tener mayores capacidades a la hora de hacer que la familia prospere en ambientes hostiles en los que los recursos escasean.(Pienso que esto es una gilipollez como una casa)

Personalmente creo que no es así ¿la prueba? ¿Hay más hombre calvos o con pelo? ¿Hay más hombre calvos casados que hombres con pelo? ¿se casan más hombres calvos o con pelo? Si se tira de estadísticas yo creo que ganan con pelo.

En los programas de televisión hay preferencia en presentadores masculinos con pelo negro y frondoso. En ocasiones con canas. Pero en casos excepcionales hay calvos. ¿por qué?























Si vemos las telenovelas latinas, los hombres están pensados para gustar a las mujeres ¿son la mayoría calvos? pues no. Suelen tener una hermosa cabellera aparte de un imponente físico.

¿Te imaginas crepúsculo con vampiro protagonista calvo y encima a lo Danny DeVito? mmmm pues va a ser que no ¿verdad?

Así que, que la puñetera verdad y realidad es que a la hora de tener progenie los calvos tienen las de perder.

Así que aprovecha ahora que puedes... ;)
7  Foros Generales / Foro Libre / Re: Fraudes telefónicos más comunes en: 29 Noviembre 2017, 12:06
Bueno, hay veces que poco se puede hacer....incluso el más pintado puede caer en una estafa.

Yo mismo me descargué un juego de Google Play. Este juego (gratuito) mostraba publicidad, yo en un descuido toqué la pantalla y sin saberlo me había suscrito a un servicio de terceros. Inmediatamente mi operadora me envía un mensaje avisándome de la suscripción. Llamé al momento y anulé la suscripción. Pese a todo recibí un primer cargo en mi factura. Tras notificarlo a mi operadora me devolvieron el dinero, un euro y pico. Sin embargo el/los estafadores se hicieron con ese euro y pico igualmente, ya que corrió a cargo de la operadora. Intenté descubrir a el/los estafadores pero me fue imposible.

Si nos descargamos programas gratuitos que sabemos tendrán publicidad, en el caso que ocupen toda la pantalla nunca tocar en ella, ni si quiera en la posible falsa X, que aparece normalmente en la parte superior derecha. Hay que pulsar el triángulo o flecha de retroceso de la parte inferior del propio móvil con Android.



Además, no es necesario pulsar un botón tipo Aceptar o Acepto, simplemente con tocar la pantalla, da igual donde, te suscribes. Excepto claro está, lo que he comentado pulsar en el triángulo o  flecha de retroceso del propio móvil.



Os juro me acaba de llamar a mi móvil de prepago el siguiente número:
+290140104

que según el prefijo +29 es de Santa Elena de Estados Unidos, casi nada.

Que impotencia y que rabia me da estas cosas de verdad. Ni os cuento lo que me pasa por la cabeza.
8  Programación / .NET / Re: 7-ZIp en: 28 Noviembre 2017, 22:11
Decidi dejarlo en Form, cumple mi requerimiento solamente falta completar el
Código:
-mx=9
y listo ya queda esta parte.

Pues  simplemente pones el comando de nivel de compresión al final de los comandos de 7za.exe:

Código
  1. p.Arguments = "a " + pathDestination + targetName + " @listfile.lst" + " -t7z -mx=9";

Lógico si quieres que el valor no sea fijo si no que se pueda modificar puedes sustituirlo por una variable

Código
  1.   int mx =1; //por defecto es uno
  2.   //...
  3. p.Arguments = "a " + pathDestination + targetName + " @listfile.lst" + " -t7z -mx=" + mx;
  4.  
  5.  

aunque realmente no es necesario usar el "=". Puedes ponerlo así -mx1, -mx2...
Código
  1. p.Arguments = "a " + pathDestination + targetName + " @listfile.lst" + " -t7z -mx" + mx;
  2.  


EN WPF
Para crear objetos como el Timer, el Button, TexBox, etc, el método a seguir es exactamente el mismo que en Windows Forms. Despliegas el cuadro de herramientas, arrastras el objeto o haces doble clic en él.

También puedes crearlos mediante código, de hecho OpenFileDialog también es un objeto o herramienta, pero no está disponible por defecto en proyectos WPF. Por esta razón es necesaria la declaración:
Código
  1. using Microsoft.Win32;

Tampoco tienes por defecto en proyectos WPF el objeto Timer.


Para corregir el error den DialogResult.OK, sustituyes por True:

Código
  1. ((ofd.ShowDialog() == true)))
  2.  

Ejemplo para WPF:
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Data;
  9. using System.Windows.Documents;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Windows.Media.Imaging;
  13. using System.Windows.Navigation;
  14. using System.Windows.Shapes;
  15.  
  16. using Microsoft.Win32; //Necesario para el uso de OpenFileDialog
  17. using System.Diagnostics; //Necesario para el uso de ProcessStartInfo y Precess
  18. using System.IO; //Necesario para el uso de File y StreamWriter
  19.  
  20. namespace WpfApplication1
  21. {
  22.    /// <summary>
  23.    /// Lógica de interacción para MainWindow.xaml
  24.    /// </summary>
  25.    public partial class MainWindow : Window
  26.    {
  27.        public MainWindow()
  28.        {
  29.            InitializeComponent();
  30.        }
  31.  
  32.        private void Button_Click_1(object sender, RoutedEventArgs e)
  33.        {
  34.  
  35.            OpenFileDialog ofd = new OpenFileDialog();
  36.  
  37.                ofd.Title = "Archivos a comprimir";
  38.                ofd.Filter = "All files|*.*";
  39.                ofd.Multiselect = true;
  40.                if ((ofd.ShowDialog() == true))
  41.                {
  42.                    StreamWriter sw = new StreamWriter("listfile.lst");
  43.                    //Crea una lista de archivos
  44.                    foreach (string n in ofd.FileNames)
  45.                    {
  46.                        sw.WriteLine(n);
  47.                    }//foreach
  48.                    sw.Close();
  49.                    int mx = 1;
  50.  
  51.                    string targetName = "Example";
  52.                    //Carpeta de destino
  53.                    string pathDestination = "Prueba\\";
  54.                    ProcessStartInfo p = new ProcessStartInfo();
  55.                    p.FileName = "7za.exe";
  56.  
  57.                    p.Arguments = "a " + pathDestination + targetName + " @listfile.lst" + " -t7z -mx" + mx;
  58.                    p.WindowStyle = ProcessWindowStyle.Hidden;
  59.                    Process x = Process.Start(p);
  60.                    x.WaitForExit();
  61.                    File.Delete("listfile.lst");
  62.                } //if
  63.  
  64.        }
  65.    }
  66. }
  67.  
  68.  



9  Programación / .NET / Re: 7-ZIp en: 28 Noviembre 2017, 11:31
Hola de nuevo  @rigorvzla

Imagino no estás programando una aplicación Windows Forms, es decir con formulario o ventana. Si no que estás programando en modo consola.

En modo consola aunque declares "using System.Windows.Forms;" te dará error en "Forms", porque no estás en modo 'formulario' si no en modo consola.

Aunque agreges referencia a System.Windows.Forms y lo declares te dará error en la línea que mencionas:

Código
  1. Dialog.Result.OK();

y el error será el siguiente:

Código:
El subproceso actual debe establecerse en el modo de subprocesamiento
 controlado simple (Single Thread Apartment, STA) para poder realizar llamadas OLE. Asegúrese de que la función Main
tiene marcado
STAThreadAttribute. Esta excepción sólo se desencadena si se adjunta un
depurador al proceso.


Los ejemplos que puse son para proyectos Windows Forms.

Los objetos como Button, Timer o TextBox son para formularios, y si creas un proyecto Windos Forms, tendrás disponible un cuadro de herramientas con dichos objetos que puedes incrustar en el formulario simplemente arrastrado o haciendo doble clic sobre ellos.



Crea  un nuevo proyecto de C# y selecciona "Aplicación de Windows Forms" entonces VS NET crea un proyecto con una ventana por defecto en la cual puedes meter objetos como un botón o un Timer. (el Timer aparecerá en la parte inferior fuera de la ventana)


Simplemente mete un botón y usa este código (acuérdate de colocar 7za.exe y 7za.dll en el directorio de la aplicación)


Código
  1. using System;
  2. using System.Windows.Forms;
  3. using System.Diagnostics;
  4. using System.IO;
  5. namespace WindowsFormsApplication1
  6. {
  7.    public partial class Form1 : Form
  8.    {
  9.        public Form1()
  10.        {
  11.            InitializeComponent();
  12.        }
  13.  
  14.        private void Form1_Load(object sender, EventArgs e)
  15.        {
  16.  
  17.        }
  18.  
  19.        private void button1_Click(object sender, EventArgs e)
  20.        {
  21.            using (OpenFileDialog ofd = new OpenFileDialog())
  22.                    {
  23.                        ofd.Title = "Archivos a comprimir";
  24.                        ofd.Filter = "All files|*.*";
  25.                        ofd.Multiselect = true;
  26.                        if ((ofd.ShowDialog() == DialogResult.OK))// <--- [b]LINEA ROJA EN OK. LA BORRE Y LO CORRI PERO HACE LO DE ABAJO [/b] (mayuscula por resaltar no gritar, aclaro)
  27.                        {
  28.                            System.IO.StreamWriter sw = new System.IO.StreamWriter("listfile.lst");
  29.                            //Crea una lista de archivos
  30.                            foreach (string n in ofd.FileNames)
  31.                            {
  32.                                sw.WriteLine(n);
  33.                            }//foreach
  34.                            sw.Close();
  35.  
  36.                            string targetName = "Example";
  37.                            //Carpeta de destino
  38.                            string pathDestination = "Prueba\\";
  39.                            ProcessStartInfo p = new ProcessStartInfo();
  40.                            p.FileName = "7za.exe";
  41.                            p.Arguments = "a " + pathDestination + targetName + " @listfile.lst" + " -t7z";
  42.                            p.WindowStyle = ProcessWindowStyle.Hidden;
  43.                            Process x = Process.Start(p);
  44.                            x.WaitForExit();
  45.                            File.Delete("listfile.lst");
  46.                        } //if
  47.                    }
  48.  
  49.        }
  50.    }
  51. }


Verás como te funciona a la perfección.


Ahora no tengo tiempo pero como veo que estás trabajando en modo consola veré como se puede aplicar todo esto en modo consola.




10  Programación / .NET / Re: 7-ZIp en: 27 Noviembre 2017, 08:03
Para agregar referencia de las dlls

1.  Abre el menú 'PROYECTO' y luego haz clic sobre 'Agregar Referencia'

2. Dale al botón '[Examinar]' que aparece abajo del cuadro junto a [Aceptar] y [Cancelar].

3. Dirígete al directorio C:\Windows\system32\ y ahí están los dll mencionados:

c:\windows\system32\shdocvw.dll
c:\windows\system32\shell32.dll


4. Seleccionas el DLL y pulsas [Agregar]


Con este código (que ya puse antes) obtienes el directorio seleccionado desde el explorer.exe. de Windows.

Código
  1. SHDocVw.ShellWindows objShellWindows = new SHDocVw.ShellWindows();
  2.            try
  3.            {
  4.                foreach (SHDocVw.InternetExplorer Explorer in objShellWindows)
  5.                {
  6.                    Shell32.FolderItems items = ((Shell32.IShellFolderViewDual2)Explorer.Document).SelectedItems();
  7.                    foreach (Shell32.FolderItem item in items)
  8.                    {
  9.                       textBox1.Text= item.Path;
  10.                    }
  11.                }
  12.            }
  13.            catch (Exception ex)
  14.            {
  15.                ex.Source = null;
  16.            }
  17.            return null;
  18.  

Creas un objeto Timer, le estableces la propiedad "Enabled" a True, para que esté en funcionamiento de lo contrario no hade nada. Y le metes ese código


Si te fijas en el código, en este caso,  el directorio obtenido es ingresado en un objeto TextBox.
Código:
textBox1.Text= item.Path;

Por lo tanto tienes que creas un objeto TextBox para visualizar el directorio.

Obvio es un ejemplo que debes adaptar a tu código y meter el 'path' en una variable para luego usarlo en el código de compresión. Te recomiendo probarlo en un proyecto aparte y una vez sepas como funciona lo aplicas a tu programa.

O sea, esto es un snippet, un código de ejemplo, un código ya hecho pero que se debe adaptar a tu programa.

Lo explico.:
Código:
      try
            {
    
            }
            catch (Exception ex)
            {
                ex.Source = null;
            }

Es un control de errores o excepción en jerga informática.  Si se produjera un error pasaría a la parte:
Código:
  catch (Exception ex)
            {
                ex.Source = null;
            }

dentro de esto podría introducirse una acción como mostrar un mensaje de error por ejemplo. En este caso no haría nada.
Código:

 foreach (Element in Object)
{
}

Es un bucle que recorre todos los elementos de una lista, matriz o colección.

OpenFileDialog
Ahora voy con lo del cuadro de dialogo. Que en fin no es tan complicado, pero como dices que buscaste códigos que pudieras entender...

Por mi parte en el código que expuse anteriormente había un error técnico pues se me olvidó poner el código de compresión dentro de la condición if /then  ya que si se pulsa Cancelar se produce un error al no obtenerse ningún directorio de archivo. Como excusa hice un copia y pega del código de compresión y lo puse fuera de la condición olvidándome por completo del error que se produce al pulsar Cancelar.

Aquí lo vuelvo a poner corregido:
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Diagnostics;
  11. namespace WindowsFormsApplication1
  12. {
  13.    public partial class Form1 : Form
  14.    {
  15.        public Form1()
  16.        {
  17.            InitializeComponent();
  18.        }
  19.  
  20.        private void Form1_Load(object sender, EventArgs e)
  21.        {
  22.  
  23.        }
  24.  
  25.        private void button1_Click(object sender, EventArgs e)
  26.        {
  27.            using (OpenFileDialog ofd = new OpenFileDialog())
  28.            {
  29.                ofd.Title = "Archivos a comprimir";
  30.                ofd.Filter = "All files|*.*";
  31.                ofd.Multiselect = true;
  32.                if ((ofd.ShowDialog() == DialogResult.OK))
  33.                {
  34.                    System.IO.StreamWriter sw = new System.IO.StreamWriter("listfile.lst");
  35.                    //Crea una lista de archivos
  36.                    foreach (string n in ofd.FileNames)
  37.                    {
  38.                        sw.WriteLine(n);
  39.                    }//foreach
  40.                    sw.Close();
  41.  
  42.                    string targetName = "Example";
  43.                    //Carpeta de destino
  44.                    string pathDestination = "Prueba\\";
  45.                    ProcessStartInfo p = new ProcessStartInfo();
  46.                    p.FileName = "7za.exe";
  47.                    p.Arguments = "a " + pathDestination + targetName + " @listfile.lst" + " -t7z";
  48.                    p.WindowStyle = ProcessWindowStyle.Hidden;
  49.                    Process x = Process.Start(p);
  50.                    x.WaitForExit();
  51.                    System.IO.File.Delete("listfile.lst");
  52.                } //if
  53.            }//using
  54.  
  55.        }//button1
  56.  
  57.    }
  58. }
  59.  

EXPLICACIÓN
Lo primero es agregar la línea para usar la clase Process;
Código
  1. using System.Diagnostics;
  2.  

y

Código
  1. using System.Windows.Forms;


La clase OpenFileDialog abre un cuadro de diálogo "Abrir".
Ejemplo:

Código
  1. using System.Windows.Forms;
  2. ...
  3.  
  4.    using (OpenFileDialog ofd = new OpenFileDialog())
  5.            {
  6.                ofd.Title = "Archivos a comprimir";
  7.                ofd.Filter = "All files|*.*";
  8.                ofd.Multiselect = true;
  9.                ofd.ShowDialog();
  10.            }
  11.  

Pero ocurre que si no se selecciona nada el cuadro no devuelve ningún valor, o sea valor nulo. Por esta razón se usa la condición :
Código
  1. //Si se pulsa el botón OK...
  2.       if ((ofd.ShowDialog() == DialogResult.OK))
  3. {
  4. ...
  5. }
  6.  

Como el cuadro de diálogo que he creado tiene activa la opción MULTISELECT,
Código:
ofd.Multiselect = true;
es decir  que permite seleccionar múltiples archivos.

He hecho que guarde y cree un archivo con la lista de los directorios de los archivos seleccionados.  Para después ser comprimidos los archivos de la lista por 7za.exe.

Esta es la parte que crea el archivo
Código
  1.    System.IO.StreamWriter sw = new System.IO.StreamWriter("listfile.lst");
  2.                    //Crea una lista de archivos
  3.                    foreach (string n in ofd.FileNames)
  4.                    {
  5.                        sw.WriteLine(n);
  6.                    }//foreach
  7.                    sw.Close();
  8.  

donde ofd.FileNames es una colección o lista de elementos seleccionados en el cuadro OpenFileDialog

Cada elemento de la lista es ingresado en la variable string 'n' y luego escrito en el archivo por 'WriteLine'

Después de comprimir, la lista es eliminada con la línea:

Código
  1. System.IO.File.Delete("listfile.lst");

También puedes importar System.IO, al principio de código;
Código
  1. using System.Text;
  2. using System.Threading.Tasks;
  3. using System.Windows.Forms;
  4. using System.Diagnostics;
  5. using System.IO;
  6. namespace WindowsFormsApplication1
  7. {
  8.    public partial class Form1 : Form
  9.    {
  10.        public Form1()
  11. ...
  12.  

y luego poner solamente;

Código
  1. File.Delete("listfile.lst");


Para que 7za.exe comprima los archivos de la lista en un único archivo, se debe usar @ +  el nombre que contiene la lista de archivos, ej.: " @listfile.lst"
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 63
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines