package库不能读取标准的windows zip文件

本文关键字:windows zip 文件 标准 读取 不能 不能读 package | 更新日期: 2023-09-27 18:15:27

当使用System.IO.Packaging程序集读取zip包时,我发现使用标准windows zip实用程序创建的zip文件无法读取(zip包的包部分(内部文件)显示不存在)。

在做了一些研究之后,似乎这是因为System.IO.Packaging库在创建zip时添加了Content_Types.xml,这似乎不存在于标准的windows压缩zip中。

的例子:

using (Package Zip = Package.Open(BundlePath, FileMode.Open))
{
    Uri FileUri = PackUriHelper.CreatePartUri(new Uri("somefile.xml", UriKind.Relative));
    if (!Zip.PartExists (FileUri ))  //this fails even though the file exists in the zip
        throw new ResourceException(String.Format("Zip {0} does not contain file", BundlePath));
    ...

是否仍然需要使用。net提供的打包系统来读取标准的zip文件,或者是否需要使用库来创建它们。

编辑:

手动添加此文件(Content_Types.xml),并使用Windows压缩实用程序进行压缩,证明可以成功地允许包读取。

谢谢。

package库不能读取标准的windows zip文件

System.IO.Packaging不是用来读取zip文件的,而是用来读取软件包的。使用DotnetZip代替。

不幸的是,我相信你是正确的,没有一种好方法可以让System.IO.Packaging库以不包含[content_types].xml文件的标准zip格式打开任何文件。

几个月前我就在研究这个问题,在我们决定最初从。net中生成所有文件之前,我试图实现一些东西来注入这个文件:

zip文件的格式如下

(——file 1——)(——file 2——)…(——file x——)(目录)

如果没有第三方库,您应该能够以二进制文件的形式打开zip文件,跳到末尾并读取该目录,在末尾添加带有types/default扩展名信息的[content_types].xml文件,调整目录条目,将其附加到文件末尾,然后继续。当我试图实现这一点时,我遇到的问题是,文件上有各种校验和,以验证它没有被损坏,我没有得到他们所有的时候,我需要改变方向。

我相信这是您需要的更多信息,但是如果您决定实现自己的解决方案,希望这对您有所帮助。