2014-02-12 54 views
10

我想按塊讀取非常大的文件(4GBish)塊。以大塊的形式讀取大文件c#

我正在嘗試使用StreamReaderRead()讀取方法。語法是:

sr.Read(char[] buffer, int index, int count) 

因爲指數int它將溢出在我的情況。我應該用什麼來代替?

回答

7

該指數是緩衝器的起始索引不是文件指針的索引,通常這將是零。在每次讀取呼叫時,您都將閱讀等於計數參數Read方法的字符。 您不會立即讀取所有文件,而是以塊讀取並使用該塊。

開始寫入的緩衝區索引,reference

char[] c = null; 
while (sr.Peek() >= 0) 
{ 
    c = new char[1024]; 
    sr.Read(c, 0, c.Length); 
    //The output will look odd, because 
    //only five characters are read at a time. 
    Console.WriteLine(c); 
} 

上例將準備1024個字節,並且將寫入到控制檯。您可以使用這些字節,例如使用TCP連接將這些字節發送到其他應用程序。

當使用Read方法,它是更有效地使用的緩衝區 的尺寸與該流,其中 內部緩衝器被設置到所需的塊的大小的內部緩衝相同的,並且以始終讀取小於塊大小的 。如果構建流時內部緩衝區的大小爲 未指定,則其默認大小爲4 千字節(4096字節),MSDN

+2

這個。你[無論如何不能有一個字節數組中的所有4 GB](http://stackoverflow.com/questions/2338778/what-is-the-maximum-length-of-an-array-in-net-on- 64位視窗)。 – CodeCaster

+0

他會閱讀大塊並使用它們。 – Adil