System.IO.Packaging库不读取标准的Windows zip文件

问题描述:

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

之后做一些研究看来,这是因为System.IO.Packaging库增添了Content_Types.xml以创建时的拉链,这似乎并没有出现在ZIP压缩标准的Windows。

例子:

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压缩工具荏苒,被证明是成功的,允许包阅读。

谢谢。

+0

什么是“标准Windows压缩实用程序”? – Oded

+0

@Oded - Windows XP,Windows 7等附带的默认压缩工具 – cweston

+0

我会再问一次,因为我不知道XP附带的压缩工具。 – Oded

System.IO.Packaging是不是有读zip文件,但包。改为使用DotnetZip

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

我工作的这个问题几个月前,这就是我想实现的东西之前,我们刚刚决定开始生成所有的文件从.NET中,将注入这个文件:

format of the zip file是以下

(---文件1 ---)(---文件2 ---)...(---文件X ---)(内容表)

如果没有第三方库,你应该能够打开一个zip文件作为二进制文件,跳到最后并阅读该目录,在末尾添加一个[content_types] .xml文件类型/默认扩展信息,调整目录条目,将其附加到文件的末尾,然后继续。我试图实现这个时遇到的问题是文件上有各种校验和来验证它没有被破坏,当我需要改变方向时我没有得到它们。

我确定这是您需要的更多信息,但是如果您决定实施自己的解决方案,希望这有助于。