Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] ¿Como Extraer Archivo .zip con Barra de progreso?

Estas en el tema de ¿Como Extraer Archivo .zip con Barra de progreso? en el foro de .NET en Foros del Web. Buenas, necesito ayuda con un problema que no he encontrado solución, soy un poco novato aquí, así que les explico. Lo que quiero hacer es ...
  #1 (permalink)  
Antiguo 10/03/2017, 22:40
 
Fecha de Ingreso: noviembre-2015
Mensajes: 6
Antigüedad: 8 años, 5 meses
Puntos: 1
Pregunta ¿Como Extraer Archivo .zip con Barra de progreso?

Buenas, necesito ayuda con un problema que no he encontrado solución,
soy un poco novato aquí, así que les explico.

Lo que quiero hacer es que al darle a un botón un archivo .zip se extraiga y muestre gráficamente cuanto falta en una barra de progreso. El código de extracción ya lo tengo:

'Extrae Zip'
Dim ZipAExtraer As String = Roaming & ("CMC\Space\System.zip")
Dim DirectorioExtraccion As String = TextBox1.Text
Using zip1 As ZipFile = ZipFile.Read(ZipAExtraer)
Dim e As ZipEntry
For Each e In zip1
e.Extract(DirectorioExtraccion, ExtractExistingFileAction.OverwriteSilently)
Next

End Using


Pero no encuentro la forma de conectarlo con la Barra de progreso, soy algo nuevo.
Por favor Necesito ayuda

Muchas Gracias.
  #2 (permalink)  
Antiguo 11/03/2017, 12:12
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 18 años, 11 meses
Puntos: 16
Respuesta: ¿Como Extraer Archivo .zip con Barra de progreso?

Buenas compañero,

Prueba esto... (lo he modificado, porque el código que tu pusiste no me funcionó muy bien..)
Código vb:
Ver original
  1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  2.         Dim sZipAExtraer As String = "C:\temp\aaa.zip"
  3.         Dim sDirectorioExtraccion As String = "C:\temp\aaa"
  4.         Dim oZip As ZipArchive = ZipFile.Open(sZipAExtraer, ZipArchiveMode.Read)
  5.         Dim lSize As Long
  6.         Dim lInicial As Long
  7.         Dim lstEntradas As List(Of ZipArchiveEntry) = oZip.Entries.OrderBy(Function(x) x.Length).ToList()
  8.  
  9.         lstEntradas.ForEach(Sub(x)
  10.                                 lSize += x.Length
  11.                             End Sub)
  12.  
  13.         ProgressBar1.Minimum = 0
  14.         ProgressBar1.Maximum = lSize
  15.         ProgressBar1.Value = 0
  16.  
  17.         For Each ent As ZipArchiveEntry In lstEntradas
  18.             lInicial = (ent.Length * 10) / 100 '10%
  19.            ProgressBar1.Value += lInicial
  20.             ent.ExtractToFile(sDirectorioExtraccion & "/" & ent.Name, True)
  21.             ProgressBar1.Value += ent.Length - lInicial '100% del archivo
  22.        Next
  23.     End Sub

Te lo explico un poco...
1º) Ordeno la lista de entradas por tamaño (menor a mayor)
2º) Miro cuanto es el tamaño total (lSize)
3º) Recorro todas las entradas, de inicio, pongo un 10% del archivo como ya descomprimido, y una vez terminado, pongo el restante



Un saludo!!!
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)
  #3 (permalink)  
Antiguo 11/03/2017, 14:11
 
Fecha de Ingreso: noviembre-2015
Mensajes: 6
Antigüedad: 8 años, 5 meses
Puntos: 1
Respuesta: ¿Como Extraer Archivo .zip con Barra de progreso?

Muchas Gracias por ayudar, pero tengo un problema a la hora de colocar el codigo.



Compo puedes observar me aparecen varios errorres y son como:
"Open no es un miembro de ZipFile"
"Length no es un miembro de ZipArchiveEntry"
"ExtracToFile no es un miembro de ZipArchiveEntry"
"Name no es un miembro de ZipArchiveEntry"

Los Imports que tengo son estos:


No se cual es el problema.
Gracias, y espero tu respuesta.

Cita:
Iniciado por Drako_18 Ver Mensaje
Buenas compañero,

Prueba esto... (lo he modificado, porque el código que tu pusiste no me funcionó muy bien..)
Código vb:
Ver original
  1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  2.         Dim sZipAExtraer As String = "C:\temp\aaa.zip"
  3.         Dim sDirectorioExtraccion As String = "C:\temp\aaa"
  4.         Dim oZip As ZipArchive = ZipFile.Open(sZipAExtraer, ZipArchiveMode.Read)
  5.         Dim lSize As Long
  6.         Dim lInicial As Long
  7.         Dim lstEntradas As List(Of ZipArchiveEntry) = oZip.Entries.OrderBy(Function(x) x.Length).ToList()
  8.  
  9.         lstEntradas.ForEach(Sub(x)
  10.                                 lSize += x.Length
  11.                             End Sub)
  12.  
  13.         ProgressBar1.Minimum = 0
  14.         ProgressBar1.Maximum = lSize
  15.         ProgressBar1.Value = 0
  16.  
  17.         For Each ent As ZipArchiveEntry In lstEntradas
  18.             lInicial = (ent.Length * 10) / 100 '10%
  19.            ProgressBar1.Value += lInicial
  20.             ent.ExtractToFile(sDirectorioExtraccion & "/" & ent.Name, True)
  21.             ProgressBar1.Value += ent.Length - lInicial '100% del archivo
  22.        Next
  23.     End Sub

Te lo explico un poco...
1º) Ordeno la lista de entradas por tamaño (menor a mayor)
2º) Miro cuanto es el tamaño total (lSize)
3º) Recorro todas las entradas, de inicio, pongo un 10% del archivo como ya descomprimido, y una vez terminado, pongo el restante



Un saludo!!!
  #4 (permalink)  
Antiguo 11/03/2017, 14:49
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 18 años, 11 meses
Puntos: 16
Respuesta: ¿Como Extraer Archivo .zip con Barra de progreso?

Buenas compañero!

Pues IONIC no es parte de .Net, y es lo que estás usando para los archivos zip.
Algo como eso procura mencionarlo! :)
Me lo he bajado y he copiado tu código inicial...
Después he aplicado lo que te pasé por aquí al código que dejaste y el resultado es éste:
Código vb:
Ver original
  1. 'Extrae Zip'
  2.        Dim ZipAExtraer As String = "C:\temp\aaa.zip"
  3.         Dim DirectorioExtraccion As String = "C:\temp\aaa"
  4.  
  5.         Using zip1 As ZipFile = ZipFile.Read(ZipAExtraer)
  6.             Dim lstEntradas As List(Of ZipEntry) = zip1.OrderBy(Function(x) x.UncompressedSize).ToList()
  7.             Dim lSizeTotal As Long = 0
  8.             Dim lInicial As Long = 0
  9.  
  10.             lstEntradas.ForEach(Sub(x) lSizeTotal += x.UncompressedSize)
  11.  
  12.             ProgressBar1.Minimum = 0
  13.             ProgressBar1.Maximum = lSizeTotal
  14.             ProgressBar1.Value = 0
  15.  
  16.             For Each e As ZipEntry In lstEntradas
  17.                 lInicial = (e.UncompressedSize * 10) / 100 '10%
  18.                ProgressBar1.Value += lInicial
  19.                 e.Extract(DirectorioExtraccion, ExtractExistingFileAction.OverwriteSilently)
  20.                 ProgressBar1.Value += e.UncompressedSize - lInicial '100% del archivo
  21.            Next
  22.         End Using


Espero que te sea útil... Un saludo compañero!!!
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)
  #5 (permalink)  
Antiguo 13/03/2017, 01:33
 
Fecha de Ingreso: noviembre-2015
Mensajes: 6
Antigüedad: 8 años, 5 meses
Puntos: 1
Respuesta: ¿Como Extraer Archivo .zip con Barra de progreso?

Muchas Gracias :D me funciono, excelente.

Cita:
Iniciado por Drako_18 Ver Mensaje
Buenas compañero!

Pues IONIC no es parte de .Net, y es lo que estás usando para los archivos zip.
Algo como eso procura mencionarlo! :)
Me lo he bajado y he copiado tu código inicial...
Después he aplicado lo que te pasé por aquí al código que dejaste y el resultado es éste:
Código vb:
Ver original
  1. 'Extrae Zip'
  2.        Dim ZipAExtraer As String = "C:\temp\aaa.zip"
  3.         Dim DirectorioExtraccion As String = "C:\temp\aaa"
  4.  
  5.         Using zip1 As ZipFile = ZipFile.Read(ZipAExtraer)
  6.             Dim lstEntradas As List(Of ZipEntry) = zip1.OrderBy(Function(x) x.UncompressedSize).ToList()
  7.             Dim lSizeTotal As Long = 0
  8.             Dim lInicial As Long = 0
  9.  
  10.             lstEntradas.ForEach(Sub(x) lSizeTotal += x.UncompressedSize)
  11.  
  12.             ProgressBar1.Minimum = 0
  13.             ProgressBar1.Maximum = lSizeTotal
  14.             ProgressBar1.Value = 0
  15.  
  16.             For Each e As ZipEntry In lstEntradas
  17.                 lInicial = (e.UncompressedSize * 10) / 100 '10%
  18.                ProgressBar1.Value += lInicial
  19.                 e.Extract(DirectorioExtraccion, ExtractExistingFileAction.OverwriteSilently)
  20.                 ProgressBar1.Value += e.UncompressedSize - lInicial '100% del archivo
  21.            Next
  22.         End Using


Espero que te sea útil... Un saludo compañero!!!

Etiquetas: barra, zip
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:22.