用DotNetZip打开Split Zip文件

时间:2017-08-03 21:49:29

标签: c# zip dotnetzip

我正在尝试使用DotNetZip库从zip文件中提取文件。我可以在单个.zip文件中提取文件。但是,当我尝试从Something.zip.0或Something.zip.1等多卷zip文件中提取文件时,我得到以下两个例外:

-Exception抛出:Ionic.Zip.dll中的'Ionic.Zip.BadReadException'

-Exception抛出:Ionic.Zip.dll中的'Ionic.Zip.ZipException'

DotNetZip是否可以读取这些类型的文件,还是应该研究另一种方法?我正在使用C#开发Visual Studios。

以下是我如何实现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 个答案:

答案 0 :(得分:2)

请参阅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);
         }
     }
  }

此方法应该能够提取拆分和不拆分的zip文件。 每个zip条目将使用zip存档中指定的完整路径(相对于当前的unpackDirectory)进行提取。

  • 无需检查zip条目是否存在(isThereItemToExtract)。将zip条目与foreach进行交互可以完成这项工作。
  • 为了避免冲突,您需要检查与zipEntry同名的文件是否存在于unpackDirectory中,或者使用ExtractExistingFileAction.OverwriteSilently标志。
  

DotNetZip是否可以读取这些类型的文件,还是应该研究另一种方法?我正在使用C#开发Visual Studios。

根据我的经验,这是处理拆分zip文件的最佳库。