我有這些將被調用的Siebel遺留應用程序的文件流發送一個C#組件會收到以下類型 .DOC,.PDF,.xls的一個文件,.RTF通過查找其二進制內容以編程方式查找文件類型。可能?
。
所以......
[LegacyApp] >> {二進制文件流} >> [成分]
繼承應用程序是一個黑盒子是不能被修改,以告知組件是什麼文件類型( doc,pdf,xls)。組件需要讀取這個二進制流,並使用正確的擴展名在文件系統上創建一個文件。
任何想法?
謝謝你的時間。
我有這些將被調用的Siebel遺留應用程序的文件流發送一個C#組件會收到以下類型 .DOC,.PDF,.xls的一個文件,.RTF通過查找其二進制內容以編程方式查找文件類型。可能?
。
所以......
[LegacyApp] >> {二進制文件流} >> [成分]
繼承應用程序是一個黑盒子是不能被修改,以告知組件是什麼文件類型( doc,pdf,xls)。組件需要讀取這個二進制流,並使用正確的擴展名在文件系統上創建一個文件。
任何想法?
謝謝你的時間。
在基於Linux/Unix系統,你可以使用文件的命令,但我相信你想在代碼中手工做自己......
如果你有機會到是文件的字節流,那麼你需要獨立處理每個文件類型。
大多數做你想知道的程序/組件通常會讀取前幾個字節並根據它進行分類。例如,GIF文件以下列之一開始:GIF87a或GIF89a
許多文件格式在文件開始時具有相同的簽名,或者具有相同的頭文件格式。此簽名被稱爲magic number as described by me on this post。
一個好的開始就是去www.wotsit.org。它包含可按文件類型搜索的文件格式規範。您可以查看要處理的重要文件類型,並查看是否可以在這些文件格式中找到某些識別因素。
您也可以搜索Google來嘗試找到執行此分類的庫,或查看文件命令的源代碼。
在linux上,有一個命令叫做file
。給定一個任意文件,它試圖確定它是什麼類型的文件。例如:
gzip compressed data, from Unix, last modified: Fri Jun 12 20:16:28 2009
HTML document text
vCalendar calendar file
RCS/CVS diff output text
這些來自我的主目錄周圍的一些隨機文件。
我正在使用將部署在Windows環境中的.net組件。 – user20358 2010-05-27 14:00:58
是的。見file
。
請不要重新發明輪子。它的工作原理很好。
當然這個特殊的輪子在Linux下工作。不是用c#定位的通用平臺。 – Jens 2010-05-27 13:50:38
@Jens - 實際上它是跨平臺的。不是用C#定位的平臺。 – amphetamachine 2010-05-27 13:51:46
謝謝Jens,我正在尋找類似於我提到的每種類型的文件簽名。 – user20358 2010-05-27 14:00:22
你在這可能感興趣的是:http://en.wikipedia.org/wiki/Magic_number_(programming)
大多數二進制格式包含在他們開始一個神奇的數字。如果您只需識別一組特定的格式,應該很容易檢查新傳入文件的前幾個字節,並正確猜測適當的文件擴展名。
謝謝,但所有MS Office文件(doc,xls,rtf)中的幻數似乎相同。我需要區分這些。 – user20358 2010-05-28 08:57:08
是的,這是可能的,因爲MS Office(97-2007或其附近)文件全部以D0CF11E開頭,然後在字節512處有一個子類型標記。
用於這些基準是: http://www.garykessler.net/library/file_sigs.html
這似乎是最好的名單各地,以各種文件格式 - 這是維基百科的主要參考依據。
它並沒有提供新的Office格式的完整細節,所以這是來自我自己的例子。 DOCX文件以「PK」開頭(技術上它們是zip文件),然後包含字符串「word/_rels/document.xml.rels」,而XLSX包含「xl/_rels/workbook.xml.rels」。
謝謝。將研究這 – user20358 2010-05-27 14:01:23
如果你想在代碼中處理,是的,你唯一的選擇是看字節,並找出什麼文件類型是基於此。大多數文件在描述數據,格式等的前幾個字節中都有某種標題。 – Justin 2010-05-27 15:50:07