2009-05-18 144 views
5

在Windows資源管理器中,您可以提取壓縮文件夾(zip文件)Windows API提取zip文件?

是否有API或命令行以編程方式使用相同方法提取zip文件?

回答

2
  1. 檢查Compress Zip files with Windows Shell API and C#
  2. 你可以使用SharpZipLib這 是免費的,一個點網項目。
+0

謝謝abmv。但第一個鏈接需要一個外部zip.exe文件。你知道zip.exe的來源嗎? 顯然SharpZipLib無法解壓縮使用WinZip創建的zip文件,可以嗎? – Aximili 2009-05-18 23:25:18

+0

我看到它來自另一個項目。我想知道你爲什麼不能把它合併成一個 – Aximili 2009-05-18 23:59:32

5

您可以使用此的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

我的Excel 2010下試過上述功能Sub UnZipFile(...),這是工作:運行時錯誤「91」(對象變量或With塊未設定)在管線

Set objArchive = objApp.Namespace(strArchive).Items() 

和線

Set objDest = objApp.Namespace(strDest) 

默默無聞:執行後objDest仍然沒有!

微軟的.Namespace()作爲參數接受對象,字符串常量或字符串變量。隨着字符串變量經常有可疑的問題,這是需要一個解決辦法:

Set objArchive = objApp.Namespace(**CStr(** strArchive **)**).Items() 
Set objDest = objApp.Namespace(**CStr(** strDest **)**) 

或其他解決辦法

Set objArchive = objApp.Namespace(**"" &** strArchive).Items() 
Set objDest = objApp.Namespace(**"" &** strDest) 

而且objDest.CopyHere objArchive也沒有工作線:目標文件夾仍然是空的!

這裏的一個版本,這是工作在Excel 2010中,最可能也是在其他環境中:

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

對於C#或VB的用戶,可以從MSDN檢查答案: https://msdn.microsoft.com/en-us/library/ms404280(v=vs.100).aspx

對於.net 4.x,這裏是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); 
     } 
    } 
}