該閱讀不做你認爲它做的事。
在Read
偏移是從緩衝器在開始寫入的數據的起始位置的偏移,它不中文件在開始讀取的偏移量。
這只是通常非零值,如果你已經部分填充的緩衝區,要釘在多一點:
fs.Read (data, 0, 8); // Put first 8 bytes of file at buffer start
fs.Read (data, 16, 8); // Put next 8 bytes of file at buffer end
fs.Read (data, 8, 8); // Put first 8 bytes of file at buffer middle
與實例,包含aaaaaaaabbbbbbbbcccccccc
該文件將在緩衝區結束如:
aaaaaaaaccccccccbbbbbbbb
您需要先求,以及使用long
作爲偏移值,所以它應該能夠很容易地處理8G的文件。這樣的事情會是一個很好的起點:
private void readingLargeFile (string path) {
long start = 3L * 1024L * 1024L * 1024L;
FileStream fs = new FileStream (path, FileMode.Open);
fs.Seek (start, SeekOrigin.Begin)
fs.Read (data, 0, 8 * 1024);
}
的Seek
更改文件的當前位置(它會讀取和/或寫入,依賴於開放的模式和功能調用)。
因此,fs.Seek (start, SeekOrigin.Begin)
將文件指針設置爲start
字符從文件的開頭。您也可以指定其他的移動方法,比如從當前位置尋找27個字節的向前尋找,或者從文件末尾尋找。
有關Seek
和Read
的詳細信息,均可在MSDN上獲得。
非常感謝PAXDIABLO先生..但你可以向我解釋什麼fs.Seek(start,SeekOrigin.Begin)呢! –
沒有問題,@MurHafSoz - 我添加了一些解釋和指向相關MSDN文檔的鏈接。 – paxdiablo