2012-12-22 59 views
2

我正在尋找創建一個文件的結構,它在大小塊。基本上我正在尋找創建一個基本的文件系統。如何讀取/寫入特定數量的字節到文件

我需要寫一個頭,然後一個「無限」可能數量的相同大小/結構的條目。最重要的部分是:

  • 每個數據塊都需要讀/寫分別
  • 頭必須是可讀/寫它自己的實體
  • 需要一種方法來存儲這些數據,並能確定在文件中的位置快速

的想象文件將類似這樣的:

[HEADER][DATA1][DATA2][DATA3][...] 

處理這樣的事情的正確方法是什麼?假設我想從文件中讀取DATA3,我怎麼知道數據塊在哪裏開始?

+0

好吧。如果所有條目的大小相同,爲什麼不能簡單地使用公式:'DATA_POSITION = HEADER_SIZE + DATA_SIZE * DATA_INDEX'? –

+0

data_index是我需要澄清的部分之一。一旦存儲了數據塊,我如何跟蹤特定數據塊的存儲位置? – jgallant

+0

如果您使用.Net 4+,那麼您可以使用內存映射文件來完成此操作。 – 48klocs

回答

1

如果我理解正確,並且您需要一種方法爲DATA塊指定一種名稱/ ID,則可嘗試引入另一種類型的塊。我們稱之爲TOC(目錄)。 因此,文件結構看起來像[HEADER][TOC1][DATA1][DATA2][DATA3][TOC2][...]

TOC塊將包含名稱/ ID和對多個DATA塊的引用。此外,它將包含一些內部數據,如指向下一個TOC塊的指針(因此,您可以將每個TOC塊視爲鏈接列表節點)。

在運行時,所有TOC塊可以表示爲一種HashMap,其中關鍵是DATA塊的名稱/ ID和價值是它在文件中的位置。

0

我在反向工作,但這可能有所幫助。

我編寫了二進制文件的反編譯器。通常有一個已知數量字節的固定標題。這包含特定的文件標識,以便我們可以識別我們正在處理的文件類型。

以下是包含段數(數據組)的固定字節數,然後告訴我們將有多少數據指針。每個數據指針可以是四個字節(或任何你需要的),代表數據塊的開始。由此我們可以計算出每個區塊的大小。然後反編譯程序每次讀取一個塊,以獲取每個數據塊文件中的大小和位置。接下來的工作是提取該字節塊並做任何需要的操作。

我們一次掃描一個文件塊。最後一個塊的大小是指向文件結尾的開始指針。