首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.IO.Packaging库不读取标准的windows zip文件。

System.IO.Packaging库不读取标准的windows zip文件。
EN

Stack Overflow用户
提问于 2011-11-23 15:25:55
回答 2查看 2.5K关注 0票数 0

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

在进行了一些研究之后,这似乎是因为在创建zip时,System.IO.Packaging库会向zip中添加一个System.IO.Packaging,而它似乎并不存在于标准的压缩zip中。

示例:

代码语言:javascript
复制
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)并使用WindowsCompression实用程序进行压缩,证明在允许读取包方面是成功的。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-23 15:51:04

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

票数 4
EN

Stack Overflow用户

发布于 2011-11-23 15:53:48

不幸的是,我相信您是对的,没有一种好的方法可以让System.IO.Packaging库以标准的压缩格式打开不包含content_types.xml文件的任何文件。

几个月前,我正致力于这个问题,在我们决定最初从.NET内部生成所有文件之前,我正试图实现一个可以注入这个文件的东西:

压缩文件的格式如下所示

(-文件1

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8244699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档