今天我正在削減視頻工作(是啊我!),我遇到了一種奇怪的視頻格式,伴隨着MOI文件的MOD文件格式。如何寫一個文件格式處理程序
我在wiki上發現了這個article在線,我想寫一個文件格式處理程序,但我不確定如何開始。
我想寫一個文件格式處理程序來讀取信息文件,有沒有人曾經這樣做,我將如何開始?
編輯:
感謝所有的建議,我會嘗試今晚,我會讓你知道。 MOI文件不是很大,最多5KB(我沒有在我面前)。
今天我正在削減視頻工作(是啊我!),我遇到了一種奇怪的視頻格式,伴隨着MOI文件的MOD文件格式。如何寫一個文件格式處理程序
我在wiki上發現了這個article在線,我想寫一個文件格式處理程序,但我不確定如何開始。
我想寫一個文件格式處理程序來讀取信息文件,有沒有人曾經這樣做,我將如何開始?
編輯:
感謝所有的建議,我會嘗試今晚,我會讓你知道。 MOI文件不是很大,最多5KB(我沒有在我面前)。
你很幸運,因爲MOI格式至少說明了文件定義。您只需讀取文件並根據文件定義解釋結果即可。
按照定義,您應該能夠創建一個可讀取和解釋文件的類,該文件將所有文件格式定義作爲其各自類型中的屬性返回。
讀取文件需要打開文件和一般讀它在逐字節的進展,如:
using(FileStream fs = File.OpenRead(path-to-your-file)) {
while(true) {
int b = fs.ReadByte();
if(b == -1) {
break;
}
//Interpret byte or bytes here....
}
}
每維基文章的引用PDF,看起來已經有人逆向工程格式。從PDF,這裏的格式中的第一項:
Hex-Address: 0x00
Data Type: 2 Byte ASCII
Value (Hex): "V6"
Meaning: Version
所以,一個簡單的實現可以從文件流拉頭2個字節的數據並將其轉換爲ASCII,這將對於版本提供的屬性值。
接着條目的格式定義:
Hex-Address: 0x02
Data Type: 4 Byte Unsigned Integer
Value (Hex):
Meaning: Total size of MOI-file
解釋的下一個4個字節,並轉換到一個unsigned int將用於MOI文件大小的屬性值。
希望這會有所幫助。
如果文件非常大,只是需要在流,我想創建一個使用unmanagedmemorystream來讀取信息的新讀者對象。
我已經做了很多不同的文件格式處理喜歡這個。最近,我已經開始讓讀者在閱讀時傾向於使用「yield return」從文件中返回只讀對象,從而使更多的閱讀器功能更強大。
但是,這一切都取決於你想要做什麼。如果您嘗試創建用於其他應用程序的通用格式或創建API,那麼您可能希望符合現有標準。但是,如果您只想將數據導入到您自己的應用程序中,則無論您希望如何,都可以自由執行此操作。您可以在流上使用binaryreader並在您的應用程序中構建所需的信息,或讓讀者返回代表文件內容的對象。
我會推薦的一件事。確保它實現了IDisposable,並將其包裝在一個使用中!
研究Unix實用程序'file'如何工作,特別是關於「魔術」文件。 'man magic'會給你很多信息。 – 2009-09-24 21:09:15