Как я могу прочитать 950MB TXT-файл в C # - PullRequest
0 голосов
/ 10 августа 2011

Мне нужно прочитать текстовый файл размером 950 МБ в консольном приложении без получения System.OutOfMemoryException, со следующей структурой:

"6152902100000017";20110701;20110701;53;"D";30359130;"NOTA DE DEBITO";"DEB.COMPRA BCO";0;;0;"6152902100000017";0;0;0;0;0;"902"

Я могу читать файлы меньшего размера, но исключение выдается для файлов большего размера. Есть предложения?

Ответы [ 4 ]

5 голосов
/ 10 августа 2011

Не читать весь файл в буфер. Читайте только столько байтов за раз, сколько вам нужно.

3 голосов
/ 10 августа 2011

Следующее будет почти всегда терпеть неудачу, 950 МБ при 2 байтах / символе слишком близко к пределу в 2 ГБ:

string AllText = File.ReadAllText(fileName);  

Чтение его как массива строк, вероятно, будет работать (особенно в 64-битной системе) если у вас есть 4+ ГБ:

string[] AllLines = File.ReadAllLines(fileName);

Но лучше всего обрабатывать их по одной строке за раз:

// requires Fx4
foreach(string line in File.GetLines(fileName))
{
    // use 'line'
}
3 голосов
/ 10 августа 2011

Если вы используете StreamReader, используйте ReadLine () или ReadBlock (), чтобы получить часть файла.

2 голосов
/ 10 августа 2011

Вы можете использовать StreamReader для этого случая и читать по одной строке за раз из источника, а не помещать весь файл в буфер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...