2009-11-30 111 views
2

我需要能够根据文件的内容识别给定的文件是ODF文件,而不是文件的扩展名。如何识别ODF文件?

ODF文件实际上是一个zip容器中的XML文件的集合,这意味着我不能使用该文件的幻数,因为它只会表明它是一个zip文件。

所以我真正要求的是是否有任何文件需要在ODF容器中?如果是这样,该文件在一个zip容器中的存在表明它可能是一个ODF文件,并且该文件的缺失表明它肯定是一个ODF文件的而不是

回答

3

为什么不看看ODF Technical Specification?在那里列出的mimetype文件可能是一个理想的检查方法(只需查找mimetype中的vnd.oasis.opendocument字符串)。

+0

是否需要将mimetype文件**置于有效的ODF文件中? – jwaddell 2009-11-30 05:02:35

+1

不在ODF1.0中:17.4 MIME类型流: 如果存在使用包的文档的MIME类型,则包 应该包含一个名为“mimetype”的流。 – Managu 2009-11-30 05:17:20

0

据我所知,在档案的根目录下总是会有.xml文件,而这个/这些xml文件将始终包含非常接近开头的字符串<office:document

我见过的所有人都似乎在根中包含一个名为“content.xml”的文件,它包含此字符串。

有没有这么多的应用程序写ODF文件,并在过去,基本上只有一个。因此,安装一些古老的OpenOffice版本,保存一些文件并检查此规则是否适用于当前的ODF文件应该不会太困难。

我将与上一批次知道ODF文件,像这样测试,以检查它是否可靠:

$ unzip -c $FILE content.xml | grep -q '<office:document' && echo yes || echo NO 
0

阅读构建标识 - 如果缺少,该文件是不是ODF。

oDoc = ThisComponent 
If oDoc.BuildID = "" Then 
    bIsNotODF = TRUE 
Endif