En Windows Explorer puede extraer una carpeta comprimida (un archivo zip)Windows API para extraer archivos zip?
¿Hay una API o línea de comando para extraer un archivo zip usando el mismo método de forma programática?
En Windows Explorer puede extraer una carpeta comprimida (un archivo zip)Windows API para extraer archivos zip?
¿Hay una API o línea de comando para extraer un archivo zip usando el mismo método de forma programática?
Puede utilizar esta secuencia de comandos VBScript:
'Adapted from http://www.robvanderwoude.com/vbstech_files_zip.html
strFile = "c:\filename.zip"
strDest = "c:\files"
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FolderExists(strDest) Then
objFSO.CreateFolder(strDest)
End If
UnZipFile strFile, strDest
Sub UnZipFile(strArchive, strDest)
Set objApp = CreateObject("Shell.Application")
Set objArchive = objApp.NameSpace(strArchive).Items()
Set objDest = objApp.NameSpace(strDest)
objDest.CopyHere objArchive
End Sub
Probé la función Sub UnZipFile(...)
anteriormente en Excel 2010 y fue no de trabajo: Error en tiempo de '91' (Object variable o con bloque no establecido) en la línea de
Set objArchive = objApp.Namespace(strArchive).Items()
y la línea
Set objDest = objApp.Namespace(strDest)
silenciosamente tampoco funciona: ¡después de la ejecución, el objDest
todavía no es nada!
Microsoft .Namespace()
acepta como parámetro un objeto, una constante de cadena o una variable de cadena. Con las variables de cadena A menudo hay problemas sospechosos, que están requiriendo una solución alternativa:
Set objArchive = objApp.Namespace(**CStr(** strArchive **)**).Items()
Set objDest = objApp.Namespace(**CStr(** strDest **)**)
o una solución alternativa
Set objArchive = objApp.Namespace(**"" &** strArchive).Items()
Set objDest = objApp.Namespace(**"" &** strDest)
y la línea objDest.CopyHere objArchive
también no funcionaba: La carpeta de destino permaneció vacío!
Aquí una versión, que está trabajando en Excel 2010 y muy probablemente también en otros entornos:
Sub UnZipFile(strZipArchive As String, strDestFolder As String)
Dim objApp As Object
Dim vItem As Variant
Dim objDest As Object
Set objApp = CreateObject("Shell.Application")
Set objDest = objApp.Namespace(CStr(strDestFolder))
For Each vItem In objApp.Namespace(CStr(strZipArchive)).Items
objDest.CopyHere vItem
Next vItem
End Sub
para C# o usuarios VB, se puede comprobar la respuesta de MSDN: https://msdn.microsoft.com/en-us/library/ms404280(v=vs.100).aspx
Para .net 4.x, aquí está el código de muestra de MSDN
using System;
using System.IO;
using System.IO.Compression;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";
string extractPath = @"c:\example\extract";
ZipFile.CreateFromDirectory(startPath, zipPath);
ZipFile.ExtractToDirectory(zipPath, extractPath);
}
}
}
Gracias abmv. Pero el primer enlace requiere un archivo zip.exe externo. ¿Sabes de dónde es ese zip.exe? Aparentemente, SharpZipLib no puede descomprimir archivos zip creados con WinZip, ¿o sí? – Aximili
Veo que es del otro proyecto. Me pregunto por qué no puedes combinarlo en uno – Aximili