2009-09-24 49 views
0

今天我正在削減視頻工作(是啊我!),我遇到了一種奇怪的視頻格式,伴隨着MOI文件的MOD文件格式。如何寫一個文件格式處理程序

我在wiki上發現了這個article在線,我想寫一個文件格式處理程序,但我不確定如何開始。

我想寫一個文件格式處理程序來讀取信息文件,有沒有人曾經這樣做,我將如何開始?

編輯:

感謝所有的建議,我會嘗試今晚,我會讓你知道。 MOI文件不是很大,最多5KB(我沒有在我面前)。

+0

研究Unix實用程序'file'如何工作,特別是關於「魔術」文件。 'man magic'會給你很多信息。 – 2009-09-24 21:09:15

回答

3

你很幸運,因爲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文件大小的屬性值。

希望這會有所幫助。

0

如果文件非常大,只是需要在流,我想創建一個使用unmanagedmemorystream來讀取信息的新讀者對象。

我已經做了很多不同的文件格式處理喜歡這個。最近,我已經開始讓讀者在閱讀時傾向於使用「yield return」從文件中返回只讀對象,從而使更多的閱讀器功能更強大。

但是,這一切都取決於你想要做什麼。如果您嘗試創建用於其他應用程序的通用格式或創建API,那麼您可能希望符合現有標準。但是,如果您只想將數據導入到您自己的應用程序中,則無論您希望如何,都可以自由執行此操作。您可以在流上使用binaryreader並在您的應用程序中構建所需的信息,或讓讀者返回代表文件內容的對象。

我會推薦的一件事。確保它實現了IDisposable,並將其包裝在一個使用中!

相關問題