2016-02-19 43 views
1

我正在閱讀一個二進制文件,我想知道一個自定義對象的元素數量,二進制文件包含(這使得搜索EOF的大小無用,因爲其全部關於元素的數量)。二進制文件中元素的數量

這是我在做什麼現在:

using (var stream = File.OpenRead(openDialog.FileName)) 
using (var reader = new BinaryReader(stream)) 
{ 
    while (CustObject.ReadFromBinaryReader(reader) != null) 
    { 
     objList.Add(CustObject.ReadFromBinaryReader(reader)); 
    } 
} 

出於某種原因,雖然,這是行不通的。我得到的錯誤:Unable to read beyond end of stream.因此,我想知道二進制文件中有多少元素,並使用該計數將所有對象讀入對象列表。

我想用的另一種方法是在寫入文件時寫入二進制文件時有多少元素。

binaryWriter.Write(string.Format("{0}", objList.Count())); 

不過,我不知道我怎麼會讀只是這個數字,所以我覺得for環是最佳的選擇。

回答

1
while (CustObject.ReadFromBinaryReader(reader) != null) 
{ 
    objList.Add(CustObject.ReadFromBinaryReader(reader)); 
} 

您的問題發生的原因可能是您在閱讀條件中的最後一項時,您以後再次閱讀。

在文件的開頭寫入元素數量,比如說整數,然後首先讀取該單個字節。檢查示例here如何將整數寫入文件。然後先讀這個整數,然後繼續閱讀你的對象。

或者如果你確切知道你的對象在文件中佔用了多少字節(如果它有固定的大小),用這個數字除文件大小?

+0

從MSDN的寫/讀出來了:)謝謝! – John

+0

@約翰很好,如果它的工作 –