我需要能够根据文件的内容识别给定文件是ODF文件,而不是文件的扩展名。
ODF文件实际上是zip容器中的XML文件集合,这意味着我无法使用该文件的幻数,因为它只是表明它是一个zip文件。
所以我真正要求的是是否有任何必需的文件存在于ODF容器中?如果是这样的话,那个文件就是zip存在容器表示它可能是一个ODF文件,并且缺少该文件表明它肯定是不一个ODF文件。
答案 0 :(得分:3)
为什么不查看ODF Technical Specification?这里列出的mimetype文件可能是一种理想的检查方式(只需在mimetype中查找vnd.oasis.opendocument
字符串)。
答案 1 :(得分:0)
根据我的理解,存档的根目录中总会有.xml文件,而这些/这些xml文件将始终包含非常接近开头的字符串<office:document
。
我见过的所有人似乎都在根目录中包含一个名为“content.xml”的文件,其中包含此字符串。
编写ODF文档的应用程序并不多,而在过去,基本上只有一个。因此,安装一些古老版本的OpenOffice,保存一些文件并检查此规则是否适用于当前ODF文件应该不会太困难。
我会在一批已知的ODF文件上测试这样的东西,检查它是否可靠:
$ unzip -c $FILE content.xml | grep -q '<office:document' && echo yes || echo NO
答案 2 :(得分:0)
阅读构建ID - 如果缺少,则文档不是ODF。
oDoc = ThisComponent
If oDoc.BuildID = "" Then
bIsNotODF = TRUE
Endif