gpt4 book ai didi

c# - 使用 C# 和 System.IO.Packaging 以编程方式从 Zip 存档中提取文件

转载 作者:IT王子 更新时间:2023-10-29 03:51:23 29 4
gpt4 key购买 nike

我有一堆 ZIP 文件,迫切需要进行一些层次结构重组和提取。目前我能做的是创建目录结构并将 zip 文件移动到正确的位置。我缺少的神秘奶酪是从 ZIP 存档中提取文件的部分。

我看过有关 ZipArchive 类的 MSDN 文章,并且对它们的理解很好。我也看到了 VBScript ways to extract .这不是一个复杂的类,因此提取内容应该非常简单。事实上,它“大部分”有效。我在下面包含了我当前的代码以供引用。

 using (ZipPackage package = (ZipPackage)Package.Open(@"..\..\test.zip", FileMode.Open, FileAccess.Read))
{
PackagePartCollection packageParts = package.GetParts();
foreach (PackageRelationship relation in packageParts)
{
//Do Stuff but never gets here since packageParts is empty.
}
}

问题似乎出在 GetParts(或 GetAnything)中的某处。包裹打开时似乎是空的。深入挖掘调试器表明私有(private)成员 _zipArchive 表明它实际上有部分。具有正确名称和一切的零件。为什么 GetParts 函数不检索它们?我试过将 open 转换为 ZipArchive,但没有帮助。呜呜。

最佳答案

如果您正在操作 ZIP 文件,您可能需要查看第 3 方库来帮助您。

例如最近更新的DotNetZip。当前版本是 v1.8。下面是创建 zip 的示例:

using (ZipFile zip = new ZipFile())
{
zip.AddFile("c:\\photos\\personal\\7440-N49th.png");
zip.AddFile("c:\\Desktop\\2005_Annual_Report.pdf");
zip.AddFile("ReadMe.txt");

zip.Save("Archive.zip");
}

这是一个更新现有 zip 的示例;您不需要提取文件来执行此操作:

using (ZipFile zip = ZipFile.Read("ExistingArchive.zip"))
{
// 1. remove an entry, given the name
zip.RemoveEntry("README.txt");

// 2. Update an existing entry, with content from the filesystem
zip.UpdateItem("Portfolio.doc");

// 3. modify the filename of an existing entry
// (rename it and move it to a sub directory)
ZipEntry e = zip["Table1.jpg"];
e.FileName = "images/Figure1.jpg";

// 4. insert or modify the comment on the zip archive
zip.Comment = "This zip archive was updated " + System.DateTime.ToString("G");

// 5. finally, save the modified archive
zip.Save();
}

这是一个提取条目的示例:

using (ZipFile zip = ZipFile.Read("ExistingZipFile.zip"))
{
foreach (ZipEntry e in zip)
{
e.Extract(TargetDirectory, true); // true => overwrite existing files
}
}

DotNetZip 支持文件名中的多字节字符、Zip 加密、AES 加密、流、Unicode、自解压存档。对于长度大于 0xFFFFFFFF 的文件,或者对于条目数超过 65535 的文件,ZIP64 也是如此。

免费。开源

获取它 codeplexdirect download from windows.net - CodePlex 已停产并存档

关于c# - 使用 C# 和 System.IO.Packaging 以编程方式从 Zip 存档中提取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/507751/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com