使用DotNetZip打开拆分的zip文件



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

抛出的异常:Ionic.Zip中的"Ionic.Zip.BadReadException.dll

抛出的异常:Ionic.Zip中的"Ionic.Zip.ZipException.dll

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();  
}

请参考 DotNetZipLibrary 代码示例:

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文件的最佳库。

最新更新