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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Comprimir carpeta?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Comprimir carpeta?  (Leído 8,387 veces)
chacKos

Desconectado Desconectado

Mensajes: 62


Ver Perfil
Comprimir carpeta?
« en: 6 Marzo 2010, 14:55 pm »

Hola, estoy intentando comprimir una carpeta. He mirado el código de msdn:
Código:
Module Module1
    Sub Main()
        ' Path to directory of files to compress.
        Dim dirpath As String = "c:\carpeta\"

        Dim di As DirectoryInfo = New DirectoryInfo(dirpath)


        ' Compress the directory's files.
        For Each fi As FileInfo In di.GetFiles()
            Compress(fi)
        Next

        ' Decompress all *.gz files in the directory.
        ' For Each fi As FileInfo In di.GetFiles("*.gz")
        'Decompress(fi)
        'Next

    End Sub

    ' Method to compress.
    Private Sub Compress(ByVal fi As FileInfo)
        ' Get the stream of the source file.
        Using inFile As FileStream = fi.OpenRead()
            ' Compressing:
            ' Prevent compressing hidden and already compressed files.

            If (File.GetAttributes(fi.FullName) And FileAttributes.Hidden) _
                <> FileAttributes.Hidden And fi.Extension <> ".gz" Then
                ' Create the compressed file.
                Using outFile As FileStream = File.Create(fi.FullName + ".gz")
                    Using Compress As GZipStream = New GZipStream(outFile, CompressionMode.Compress)
                        ' Copy the source file into the compression stream.
                        Dim buffer As Byte() = New Byte(4096) {}
                        Dim numRead As Integer
                        numRead = inFile.Read(buffer, 0, buffer.Length)
                        Do While numRead <> 0
                            Compress.Write(buffer, 0, numRead)
                            numRead = inFile.Read(buffer, 0, buffer.Length)
                        Loop

                        Console.WriteLine("Compressed {0} from {1} to {2} bytes.", _
                                          fi.Name, fi.Length.ToString(), outFile.Length.ToString())

                    End Using
                End Using
            End If
        End Using
    End Sub
    ' Method to decompress.
    Private Sub Decompress(ByVal fi As FileInfo)
        ' Get the stream of the source file.
        Using inFile As FileStream = fi.OpenRead()
            ' Get orignial file extension, for example "doc" from report.doc.gz.
            Dim curFile As String = fi.FullName
            Dim origName = curFile.Remove(curFile.Length - fi.Extension.Length)

            ' Create the decompressed file.
            Using outFile As FileStream = File.Create(origName)
                Using Decompress As GZipStream = New GZipStream(inFile, CompressionMode.Decompress)
                    ' Copy the compressed file into the decompression stream.
                    Dim buffer As Byte() = New Byte(4096) {}
                    Dim numRead As Integer
                    numRead = Decompress.Read(buffer, 0, buffer.Length)
                    Do While numRead <> 0
                        outFile.Write(buffer, 0, numRead)
                        numRead = Decompress.Read(buffer, 0, buffer.Length)
                    Loop
                    Console.WriteLine("Decompressed: {0}", fi.Name)

                End Using
            End Using
        End Using
    End Sub
End Module
Pero no se me ocurre como puedo para solo comprimir una carpeta, ya que este código comprime cada fichero de dentro del directorio por separado!


En línea



---] chacKos [---
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Comprimir carpeta?
« Respuesta #1 en: 6 Marzo 2010, 15:46 pm »

Hasta el momento, que yo sepa, no existe una clase dentro del framework que pueda hacer esa tarea, por lo cual tienes que crear tu propia solicion para meter todos los archivos y carpetas dentro de un solo archivo.

Va algo así:

Comprimes un archivo, lees su contenido binario, y vas creando otro archivo con una estructura que sea capaz de entenderse de nuevo para ser "desarmada" y luego descomprimir cada archivo de nuevo.

No se si me di a entender. Es que tengo un poco de sueño! jeje

Saludos!


En línea

chacKos

Desconectado Desconectado

Mensajes: 62


Ver Perfil
Re: Comprimir carpeta?
« Respuesta #2 en: 6 Marzo 2010, 17:33 pm »

Ok, gracias, se me ocurrió tal vez con alguna dll del winrar o algo pero no se sí se podrá!

Estoy probando con la dll ionic.utils.zip.dll, funciona bien pero el problema es que el ejecutable tiene que estar en el mismo directorio que la dll, como puedo hacer para que la dll esté dentro del proyecto?
« Última modificación: 7 Marzo 2010, 11:42 am por C-ChacK » En línea



---] chacKos [---
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Comprimir carpeta?
« Respuesta #3 en: 8 Marzo 2010, 15:42 pm »

Estoy probando con la dll ionic.utils.zip.dll, funciona bien pero el problema es que el ejecutable tiene que estar en el mismo directorio que la dll, como puedo hacer para que la dll esté dentro del proyecto?

Bueno, crea un proyecto en .Net , e intenta hacerle referencia, en caso de que se pueda (COM), Visual Studio te va a ahorrar mucho trabajo con las llamadas y eso. Sino vas a tener que apuntar a mano :P

Sino, va a tener que estar registrada la libreria.

Yo creo que es mejor que te programes la solucion que te escribi en el post. Es más divertido!

Saludos!
En línea

MANULOMM


Desconectado Desconectado

Mensajes: 559


Erepublik.com


Ver Perfil
Re: Comprimir carpeta?
« Respuesta #4 en: 8 Marzo 2010, 17:46 pm »

Te recomiendo mires la DLL de compresion de ICSharpCode es mas sencilla de usar y esta Hecha en .net, aunque ya miraste las opciones de compresion del framework?

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
En línea


chacKos

Desconectado Desconectado

Mensajes: 62


Ver Perfil
Re: Comprimir carpeta?
« Respuesta #5 en: 8 Marzo 2010, 23:52 pm »

La cosa es que al usar una dll como lo hago yo queda junto con el .exe, y si dicha dll no está en el mismo directorio pues no funciona, la cosa es como hacer para que esté dentro del .exe! No sé supongo que habrá alguna forma de comprimir/empaquetar los archivos de un directorio en uno solo!
En línea



---] chacKos [---
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Comprimir carpeta?
« Respuesta #6 en: 10 Marzo 2010, 22:43 pm »

Bajate estas 3 clases:
http://www.mediafire.com/?3yonwxo3dr2

http://www.mediafire.com/?n3qmuwdmmgn

http://www.mediafire.com/?dmitmmmxdzy


Código:
GZipResult result = GZip.Compress(sourceFolder,destFolder,fileName);

Con eso estas resuelto :D

Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[BATCH] Comprimir carpeta a zip
Scripting
Dany3j 6 14,744 Último mensaje 27 Enero 2012, 23:31 pm
por Dany3j
Comprimir carpeta a formato deseado
Dudas Generales
GeorgArming 0 1,384 Último mensaje 26 Junio 2012, 02:16 am
por GeorgArming
Subir carpeta entera por ftp en [batch] sin comprimir
Scripting
el_junior 0 2,009 Último mensaje 8 Febrero 2014, 01:29 am
por el_junior
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines