【发布时间】:2009-11-30 04:52:09
【问题描述】:
我需要能够根据文件的内容而不是文件的扩展名来识别给定文件是 ODF 文件。
ODF 文件实际上是 zip 容器中 XML 文件的集合,这意味着我不能使用文件的幻数,因为它只会表明它是一个 zip 文件。
所以我真正要问的是 ODF 容器中是否有任何必需文件?如果是,那么该文件是否存在于 zip 中container 表明它很可能是一个 ODF 文件,而没有该文件则表明它肯定是不是一个 ODF 文件。
【问题讨论】:
我需要能够根据文件的内容而不是文件的扩展名来识别给定文件是 ODF 文件。
ODF 文件实际上是 zip 容器中 XML 文件的集合,这意味着我不能使用文件的幻数,因为它只会表明它是一个 zip 文件。
所以我真正要问的是 ODF 容器中是否有任何必需文件?如果是,那么该文件是否存在于 zip 中container 表明它很可能是一个 ODF 文件,而没有该文件则表明它肯定是不是一个 ODF 文件。
【问题讨论】:
为什么不查看ODF Technical Specification?列出的 mimetype 文件可能是一种理想的检查方式(只需在 mimetype 中查找 vnd.oasis.opendocument 字符串)。
【讨论】:
据我了解,存档的根目录中总会有 .xml 文件,并且此/这些 xml 文件将始终包含字符串 <office:document 非常接近开头。
我所看到的所有这些似乎都在根目录中包含一个名为“content.xml”的文件,其中确实包含此字符串。
编写ODF文档的应用程序并不多,过去基本上只有一个。因此,安装一些古老版本的 OpenOffice、保存一些文件并检查此规则是否适用于当前的 ODF 文件应该不会太难。
我会在一批已知的 ODF 文件上进行类似的测试,以检查它是否可靠:
$ unzip -c $FILE content.xml | grep -q '<office:document' && echo yes || echo NO
【讨论】:
读取构建 ID - 如果缺少,则文档不是 ODF。
oDoc = ThisComponent
If oDoc.BuildID = "" Then
bIsNotODF = TRUE
Endif
【讨论】: