2017-08-03 79 views
2

DotNetZipライブラリを使用してzipファイルからファイルを抽出しようとしています。私はそれが単一の.zipファイルであるときにファイルを抽出することができます。しかし、Something.zip.0やSomething.zip.1のようなマルチボリュームのzipファイルからファイルを抽出しようとすると、次の2つの例外が発生します。DotNetZipで分割Zipファイルを開く

-Exceptionスロー: 'Ionic.Zip.BadReadException' in Ionic.Zip.dll

-Exceptionスロー:DotNetZipは、これらのファイルの種類を読み取るためには「Ionic.Zip.ZipException」Ionic.Zip.dll

は可能ですか、私が代わりに探してする必要がありますアプローチ?私はVisual StudioでC#を使って作業しています。

ここでは、私はどのように私のzipファイルの抽出を実装するスニペットです。

using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(_pathToZip)) 
    { 
     zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestSpeed; 
     foreach(Ionic.Zip.ZipEntry ze in zip) 
      { 
       string fileName = ze.FileName; 
       bool isThereItemToExtract = isThereMatch(fileName.ToLower(), _folderList, _fileList); 
       if (isThereItemToExtract) 
       {  
        string pathOfFileToExtract = (_destinationPath + "\\" + ze.FileName).Replace('/', '\\'); 
        string pathInNewZipFile = goUpOneDirectoryRelative(ze.FileName); 
        ze.Extract(_destinationPath, Ionic.Zip.ExtractExistingFileAction.OverwriteSilently); 
        _newZip.AddItem(pathOfFileToExtract, pathInNewZipFile); 
       } 
      } 
     _newZip.Save(); 
    } 

答えて

1

この方法は、分割して、分割ではないいずれかのzipファイルを解凍することができるはずDotNetZipLibrary code examples:

using Ionic.Zip; 

private void MyExtract(string zipToUnpack, string unpackDirectory) 
{ 
    using (ZipFile zip1 = ZipFile.Read(zipToUnpack)) 
    { 
      // here, we extract every entry, but we could extract conditionally 
      // based on entry name, size, date, checkbox status, etc. 
     foreach (ZipEntry e in zip1) 
     { 
      e.Extract(unpackDirectory, ExtractExistingFileAction.OverwriteSilently); 
     } 
    } 
    } 

を参照してください。 すべてのジップエントリは、現在のunpackDirectoryを基準にして、zipアーカイブに指定されたフルパスで抽出されます。

  • zipエントリが存在しないかどうかを確認する必要はありません(isThereItemToExtract)。 foreachでジップの入力を中断することは仕事をするべきです。
  • 衝突を避けるには、unpackDirectoryにzipEntryと同じ名前のファイルがあるかどうかを確認するか、ExtractExistingFileAction.OverwriteSilentlyフラグを使用する必要があります。

それはDotNetZipは、これらのファイルの種類を読み取るために、または私は別のアプローチを検討してしなければならないことは可能ですか?私はVisual StudioでC#を使って作業しています。

私の経験では、これは分割されたzipファイルを処理するのに最適なライブラリです。

関連する問題