2009-05-18 43 views
5

Windowsエクスプローラで圧縮されたフォルダ(zipファイル)を抽出することができますzipファイルを解凍するWindows API?

プログラムで同じ方法を使用してzipファイルを抽出するAPIまたはコマンドラインはありますか?

答えて

2
  1. チェックCompress Zip files with Windows Shell API and C#
  2. あなたはドットネットのプロジェクトのために自由である SharpZipLibを使用することができます。
+0

ありがとうございます。しかし、最初のリンクには外部zip.exeファイルが必要です。そのzip.exeがどこにあるのか知っていますか? 明らかに、SharpZipLibはWinZipを使って作成したzipファイルを解凍できません。 – Aximili

+0

他のプロジェクトのものですなぜあなたはそれを一つにまとめることができないのだろうか? – Aximili

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も働いていませんでした:保存先のフォルダが空に残っ!の文字列変数で不審な回避策を必要としている問題は、多くの場合がありますここで

他の環境でも、おそらくエクセル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); 
     } 
    } 
} 
関連する問題