2009-05-18 25 views

Respuesta

2
  1. Comprobar Compress Zip files with Windows Shell API and C#
  2. Usted podría utilizar SharpZipLib cuales es libre para un proyecto de punto net.
+0

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

+0

Veo que es del otro proyecto. Me pregunto por qué no puedes combinarlo en uno – Aximili

5

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 
0

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 
0

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); 
     } 
    } 
} 
Cuestiones relacionadas