当使用System.IO.Packaging程序集读取zip包时,我发现使用标准的windows实用程序创建的zip文件无法读取( zip包的包部件(内部文件)显示为不存在)。
在进行了一些研究之后,这似乎是因为在创建zip时,System.IO.Packaging库会向zip中添加一个System.IO.Packaging,而它似乎并不存在于标准的压缩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)并使用WindowsCompression实用程序进行压缩,证明在允许读取包方面是成功的。
谢谢。
发布于 2011-11-23 15:51:04
System.IO.Packaging不是用来读取压缩文件的,而是用来读取包的。使用DotnetZip代替。
发布于 2011-11-23 15:53:48
不幸的是,我相信您是对的,没有一种好的方法可以让System.IO.Packaging库以标准的压缩格式打开不包含content_types.xml文件的任何文件。
几个月前,我正致力于这个问题,在我们决定最初从.NET内部生成所有文件之前,我正试图实现一个可以注入这个文件的东西:
压缩文件的格式如下所示
(-文件1
如果没有第三方库,您应该能够以二进制文件的形式打开zip文件,跳到末尾并读取目录,在末尾添加一个带有类型/默认扩展名信息的content_types.xml文件,调整目录条目,将其附加到文件的末尾,然后继续。当我试图实现它时遇到的问题是,文件上有各种校验和来验证它是否已经损坏,在我需要改变方向时,我还没有全部得到它们。
我相信这是您需要的更多信息,但是如果您决定实现您自己的解决方案,希望这会有所帮助。
https://stackoverflow.com/questions/8244699
复制相似问题