Чтение большого файла в кусках С#

Я хочу прочитать фрагмент большого файла (4GBish) куском.

В настоящее время я пытаюсь использовать метод чтения StreamReader и Read(). Синтаксис:

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

Поскольку индекс int, в моем случае это будет переполнение. Что я должен использовать вместо этого?

Ответ 1

Индекс - это начальный индекс буфера, а не индекс указателя файла, обычно он равен нулю. На каждом вызове Read вы будете читать символы, равные параметру count метода Read. Вы не будете читать весь файл сразу, скорее прочитайте в кусках и используйте этот кусок.

Индекс буфера, с которого нужно начать писать, ссылка.

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

Вы можете попробовать более простую версию Read, которая не разбивает поток, а вместо этого читает его по символу. Вам нужно было бы реализовать кусок себя, но это даст вам больше контроля, позволяя вам использовать Long.

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