• Jueves 28 de Marzo de 2024, 12:49

Autor Tema:  comprimir una carpeta o archivo  (Leído 16131 veces)

alexisgondola

  • Miembro activo
  • **
  • Mensajes: 37
  • Nacionalidad: pa
    • Ver Perfil
comprimir una carpeta o archivo
« en: Viernes 14 de Septiembre de 2012, 21:51 »
0
Buenas tardes que tal, estaba intentando realizar este ejemplo que comprime esta echo en c #, lo pase a visual basic pero no me esta funcionando, no ingresa al ciclo for

este es el  link del ejemplo
http://copstone.com/2010/03/comprimir-y-descomprimir-archivos-con-net-framework/



este es el codigo que yo estaba realizando en visual basic.net

por favor si me podria ayudar, estoy intentando comprimir una carpeta utilizando las librerias del frameword




Imports System
Imports System.Data
Imports System.Math
Imports System.Collections.Generic
Imports System.Text
Imports System.IO
Imports System.IO.Compression
Imports System.IO.DirectoryInfo

 Sub Main()

        Dim path As String

        path = "C:\pruebass"

        Comprimir_Archivos_Carpeta(Path)

        Console.ReadLine()

    End Sub



Public Sub Comprimir_Archivos_Carpeta(ByVal path As String)

        Dim dr As New DirectoryInfo(path)

        Dim fsOrigen As FileStream = Nothing

        Dim fsDestino As FileStream = Nothing

        Dim gzip As GZipStream = Nothing

        Dim filename As String = ""

        Const bufferSize As Integer = 4096

        Dim buffer(0 To bufferSize - 1) As Byte


        For Each fl As FileInfo In dr.GetFiles()

            filename = fl.FullName & ".gz"
            fsOrigen = New FileStream(fl.FullName, FileMode.Open, FileAccess.Read, FileShare.Read)
            fsDestino = New FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None)
            gzip = New GZipStream(fsOrigen, CompressionMode.Compress, True)
            While True

                Dim cantleida As Integer = gzip.Read(buffer, 0, bufferSize)
                If cantleida <> 0 Then
                    gzip.Write(buffer, 0, cantleida)
                Else
                    Exit For
                End If

            End While
        Next

    End Sub

todos los dias se aprende algo nuevo

Haggen

  • Miembro activo
  • **
  • Mensajes: 88
  • Nacionalidad: mx
    • Ver Perfil
    • Mis proyectos
Re:comprimir una carpeta o archivo
« Respuesta #1 en: Viernes 19 de Octubre de 2012, 18:25 »
0
 Bueno en vb.net no se, pero podrías usar un programa externo, por ejemplo 7z (licencia libre) y comprimir tu archivo, lo llamarias desde tu codigo vb (en modo oculto), esperas a que termine de comprimir y ya queda tu archivo compactado.

asnaed

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re:comprimir una carpeta o archivo
« Respuesta #2 en: Miércoles 12 de Diciembre de 2012, 00:18 »
0
Como le e realizado es de la siguiente manera:

lo que necesitas es un libreria "Ionic.Zlib" (dll) la cual comprime

luego hacer referenciar el archivo desde el proyecto. Apretamos el botón derecho encima del proyecto y pulsamos "Agregar referencia"


vamos a la pestaña "Examinar" y seleccionamos la librería "Ionic.Zip.dll"



Y, finalmente, desde el código fuente, vamos a importar la librería para poder utilizar sus métodos.

Imports ionic.zip


Descomprimir un archivo

Para descomprimir un archivo, usaremos un procedimiento Sub que se llamará "Extraer". Os pego el código:

Código: vb.net
  1.  
  2. Private Sub Extraer()
  3.      Dim ZipAExtraer As String = "ArchivoZipAExtraer"
  4.      Dim DirectorioExtraccion As String = "CarpetaDondeIraElArchivoExtraido"
  5.      Using zip1 As ZipFile = ZipFile.Read(ZipAExtraer)
  6.           Dim e As ZipEntry
  7.           For Each e In zip1
  8.                e.Extract(DirectorioExtraccion, ExtractExistingFileAction.OverwriteSilently)
  9.           Next
  10.      End Using
  11. End Sub
  12.  

explicacion cada variable:

ZipAExtraer: Variable de tipo "String" donde pondremos la ruta para el archivo a extraer
DirectorioExtraccion: Variable de tipo "String" donde pondremos la ruta donde irá el archivo extraído.
zip1: Variable de tipo "ZipFile" (incluido en la clase ionic.zip.dll) que le dice a la clase que archivo tiene que leer y el contenido a extraer.
Una vez con la ruta de entrada (Guardado en ZipAExtraer), la ruta de salida (Guardado en DirectorioExtraccion) y diciéndole que lo extraiga (gracias a la variable zip1), la función ya está lista para su uso.

Comprimir un archivo

ora realizaremos el procedimiento a la inversa, en que seleccionaremos unos cuantos archivos y los comprimiremos en un archivo .zip

Esta vez usaremos un procedimiento Sub que se llamará "Comprimir". Os pego el código:

Código: vb.net
  1. Private Sub Comprimir()
  2.      Using zip As ZipFile = New ZipFile()
  3.           zip.AddFile("Archivo1")
  4.           zip.AddFile("Archivo2")
  5.           zip.AddFile("Archivo3")
  6.           zip.Save("Miarchivozip.zip")
  7.      End Using
  8. End Su

Esta vez el código es mucho más sencillo. Lo que hace este procedimiento es declarar una variable llamada "zip" de tipo "ZipFile" (incluido en la clase ionic.zip.dll) y, una vez declarada, usaremos el método "AddFile" para ir añadiendo los archivos que queramos incluir en el Zip.

Es por eso que, en donde dice "Archivo1", "Archivo2", etc.... tenemos que pegar la ruta donde tenemos el archivo a comprimir.

Finalmente, una vez con todos los archivos, se utiliza el método "Save" para guardar el archivo comprimido en .zip
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

DavidAlonso

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re:comprimir una carpeta o archivo
« Respuesta #3 en: Miércoles 5 de Junio de 2013, 16:29 »
0
Como le e realizado es de la siguiente manera:

lo que necesitas es un libreria "Ionic.Zlib" (dll) la cual comprime

luego hacer referenciar el archivo desde el proyecto. Apretamos el botón derecho encima del proyecto y pulsamos "Agregar referencia"


vamos a la pestaña "Examinar" y seleccionamos la librería "Ionic.Zip.dll"



Y, finalmente, desde el código fuente, vamos a importar la librería para poder utilizar sus métodos.

Imports ionic.zip


Descomprimir un archivo

Para descomprimir un archivo, usaremos un procedimiento Sub que se llamará "Extraer". Os pego el código:

Código: vb.net
  1.  
  2. Private Sub Extraer()
  3.      Dim ZipAExtraer As String = "ArchivoZipAExtraer"
  4.      Dim DirectorioExtraccion As String = "CarpetaDondeIraElArchivoExtraido"
  5.      Using zip1 As ZipFile = ZipFile.Read(ZipAExtraer)
  6.           Dim e As ZipEntry
  7.           For Each e In zip1
  8.                e.Extract(DirectorioExtraccion, ExtractExistingFileAction.OverwriteSilently)
  9.           Next
  10.      End Using
  11. End Sub
  12.  

explicacion cada variable:

ZipAExtraer: Variable de tipo "String" donde pondremos la ruta para el archivo a extraer
DirectorioExtraccion: Variable de tipo "String" donde pondremos la ruta donde irá el archivo extraído.
zip1: Variable de tipo "ZipFile" (incluido en la clase ionic.zip.dll) que le dice a la clase que archivo tiene que leer y el contenido a extraer.
Una vez con la ruta de entrada (Guardado en ZipAExtraer), la ruta de salida (Guardado en DirectorioExtraccion) y diciéndole que lo extraiga (gracias a la variable zip1), la función ya está lista para su uso.

Comprimir un archivo

ora realizaremos el procedimiento a la inversa, en que seleccionaremos unos cuantos archivos y los comprimiremos en un archivo .zip

Esta vez usaremos un procedimiento Sub que se llamará "Comprimir". Os pego el código:

Código: vb.net
  1. Private Sub Comprimir()
  2.      Using zip As ZipFile = New ZipFile()
  3.           zip.AddFile("Archivo1")
  4.           zip.AddFile("Archivo2")
  5.           zip.AddFile("Archivo3")
  6.           zip.Save("Miarchivozip.zip")
  7.      End Using
  8. End Su

Esta vez el código es mucho más sencillo. Lo que hace este procedimiento es declarar una variable llamada "zip" de tipo "ZipFile" (incluido en la clase ionic.zip.dll) y, una vez declarada, usaremos el método "AddFile" para ir añadiendo los archivos que queramos incluir en el Zip.

Es por eso que, en donde dice "Archivo1", "Archivo2", etc.... tenemos que pegar la ruta donde tenemos el archivo a comprimir.

Finalmente, una vez con todos los archivos, se utiliza el método "Save" para guardar el archivo comprimido en .zip

Disculpa asnaed espero y me puedas contestar, me sirvio este codigo y lo modifique para que el usuario seleccione el archivo manualmente con un OpenFileDialog, pero mi duda es, como puedo hacerle para que el archivo se comprima con el mismo nombre que el usuario selecciono en dado caso de que haya comprimido solo un archivo...
Saludos!

asnaed

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re:comprimir una carpeta o archivo
« Respuesta #4 en: Jueves 6 de Junio de 2013, 17:47 »
0
bueno DavidAlonso.
No se si te entendí
pero lo que tu deseas es que al momento de comprimir que el archivo este tenga el mismo nombre de el otro archivo
 
si deseas podrías poner tu código o hacerlo llegar a mi correo caflores.sys@gmail.com

con gusto te ayudare
 :yes:  :yes:

Rochaman

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re:comprimir una carpeta o archivo
« Respuesta #5 en: Viernes 5 de Diciembre de 2014, 15:34 »
0
Tengo una duda con este código. Resulta que lo hace pero no como espero.
En zip.AddFile("Archivo 1") colo la ruta y nombre de archivo, por ejemplo: zip.AddFile("C:\Users\Informatica\Escritorio\Backup\BDPesaje.bak"), y en zip.Save("Miarchivozip.zip") coloco zip.Save("C:\Users\Informatica\Escritorio\Backup\BDPesaje.zip"), y me deja el zip dentro de la carpeta de escritorio pero me crea de nuevo las carpetas, Users > Informatica > Escritorio > Backup...etc.... Como puedo evitar eso? Probé colocando solo el nombre del archivo en zip.save("nombrearchivo.zip) pero me va a dejar este zip a la carpeta bin de mi proyecto y no en la carpeta que esta en escritorio. Please, alguien me de una manito. Gracias.

Private Sub Comprimir()
     Using zip As ZipFile = New ZipFile()
          zip.AddFile("Archivo1")
          zip.AddFile("Archivo2")
          zip.AddFile("Archivo3")
          zip.Save("Miarchivozip.zip")
     End Using
End Su