以块的形式读取大文件c#

时间:2014-02-12 11:10:56

标签: c# streamreader

我想通过chunk读取非常大的文件(4GBish)块。

我目前正在尝试使用StreamReaderRead()读取方法。语法是:

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

因为索引int,所以在我的情况下它会溢出。我该怎么用?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以尝试更简单的Read版本,它不会对流进行分块,而是逐个字符地读取它。你必须实现自己的分块,但它会给你更多的控制权,允许你使用Long。

http://msdn.microsoft.com/en-us/library/ath1fht8(v=vs.110).aspx