1

我有一个 zip 文件,我正在尝试读取其中的内容,在我需要读取一个名为[Content_Types].xml. 当我尝试创建一个新的 URI 时,它会尝试将括号转换为对 url 友好的内容,这会导致文件名不匹配。

System.IO.Packaging.Package用来读取 zip 文件,当尝试使用package.GetPart().

如何创建一个 URI 以保持括号完整,以便从包中读取文件?

为了澄清我在这里尝试做什么,Office Open XML 文件(.docx、.xlsx、.pptx 等)实际上是具有不同扩展名的 zip 文件。如果将具有这些扩展名之一的文件重命名为 .zip,则可以看到 Office 文件结构的内容。每个 Office Open XML 文件的根目录中包含的文件之一是一个名为“[Content_Types].xml我需要修改该特定文件”的文件。

4

2 回答 2

1

有一个接受布尔 dontEscape 的重载 URI 构造函数,它应该防止括号被转义。 类似的问题

基于重新阅读更新的问题进行编辑:因此,从一些谷歌搜索来看,[Content_Types].xml 是一个将 zip 文件转换为“zip 包”的文件。巧合的是,System.IO.Packaging.Package仅适用于 zip 包(而非常规 zip 文件)。它也只编写 zip 包(总是包括 [Content_Types].xml)。我不认为您可以System.IO.Packaging.Package通过设计直接访问 [Content_Types].xml。

于 2012-12-27T21:14:35.437 回答
0

那是不可能的。

根据RFC 2396,诸如[]之类的字符属于“不明智”类别,因为已知网关和其他传输代理会修改它们。

无论如何,RFC 3986在这个主题上更加明确:

由 Internet 协议文字地址(版本 6
[RFC3513] 或更高版本)标识的主机通过将 IP 文字
括在方括号(“[”和“]”)中来区分。 这是URI 语法中唯一允许使用方括号字符的地方。

因此,您可以使用方括号的唯一方法是您所依赖的代码未能满足 RFC 规范。

我可能会尝试使用该package.GetParts()方法遍历这些部分并输出它们的 URI。看看你的特殊文件返回了什么会很有趣。

于 2012-12-27T21:39:48.703 回答