我有一个zip文件,我正在尝试阅读其内容,在我需要读取名为 [Content_Types].xml
的文件之前,该文件一直很顺利 . 当我尝试创建一个新的URI时,它会尝试将括号转换为友好的url,这会导致文件名不匹配 .
我正在使用 System.IO.Packaging.Package
来读取zip,这在尝试使用 package.GetPart()
读取部分包时需要URI .
如何创建一个URI,保留括号,以便从包中读取文件?
为了澄清我在这里要做的事情,Office Open XML文件(.docx,.xlsx,.pptx等)实际上是具有不同扩展名的zip文件 . 如果将其中一个扩展名的文件重命名为.zip,则可以看到Office文件结构的内容 . 每个Office Open XML文件的根目录中包含的文件之一是 [Content_Types].xml
我需要修改该特定文件 .
2 回答
那是不可能的 .
根据RFC 2396,
[
和]
等字符属于"unwise"类别,因为已知网关和其他传输代理可以修改它们 .无论如何,RFC 3986在这个问题上更加明确:
因此,您可以使用方括号的唯一方法是,您依赖的代码是否无法满足RFC规范 .
我可能会尝试使用
package.GetParts()
方法迭代各部分并输出它们的URI . 看看你的特殊文件会返回什么会很有趣 .有一个重载的URI构造函数接受一个布尔dontEscape,它应该阻止括号被转义 . Similar question
基于重新阅读更新的问题进行编辑:所以从一些谷歌搜索,它看起来像[Content_Types] .xml是一个将zip文件转换为"zip package"的文件 . 巧合的是,
System.IO.Packaging.Package
仅适用于zip包(不是常规的zip文件) . 它也只编写zip包(总是包含[Content_Types] .xml) . 我不认为你可以通过设计直接在[Content_Types] .xml到System.IO.Packaging.Package
.