2009-11-30 117 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