2012-06-07 37 views
3

在C#中,FileStream的方法Read/Write/Seek在參數中取integer。在previous post中,我看到了一個很好的解決方案來讀取/寫入大於分配給進程的虛擬內存的文件。在C#中查找和寫入大於2GB的文件

如果您想從頭到尾寫入數據,此解決方案可以正常工作。但就我而言,我收到的大量數據沒有特定的順序。

我有工作的小於2GB代碼的文件:

private void WriteChunk(byte[] data, int position, int chunkSize, int count, string path) 
    { 

     FileStream destination = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); 
     BinaryWriter writer = new BinaryWriter(destination); 
     writer.Seek((int) (position*chunkSize), SeekOrigin.Begin); 
     writer.Write(data, 0, count); 
     writer.Close(); 
    } 

有沒有一種方法,我可以尋求和寫入我的組塊的文件大於2GB?

回答

4

不要使用int,使用long。尋求需要很長的時間。

雖然你需要使用很長的時間,而不是隻是在某處拋出int。

+1

謝謝!我看到BinaryWriter沒有超載尋找一個很長的,但FileStream。 –

+0

MSDN文檔顯示BinaryWriter.Seek的偏移參數爲int。在VS2010中進行雙重檢查,BinaryWriter.Seek將第一個參數顯示爲int,沒有重載。那麼需要多長時間? – user957902

+2

在打開BinaryReader之前,您需要查找FileStream。 – usr

2
writer.Seek((long)position*chunkSize, SeekOrigin.Begin); 
+0

它不適用於BinaryWriter。 –

+0

直接使用filestream,foo! – Joshua