EDIT: @Everyone Извините, я чувствую себя глупо, перепутавшись с размером int32. Вопрос может быть закрыт, но поскольку уже есть несколько ответов, я выбрал первый. Оригинальный вопрос ниже для справкиЧтение определенной строки из огромного текстового файла (C# 4.0)
Я ищу способ загрузки определенной строки из очень больших текстовых файлов, и я планировал на использовании File.ReadLines и метод Skip():
File.ReadLines(fileName).Skip(nbLines).Take(1).ToArray();
Проблема заключается в том, что Skip()
принимает значение int
, а значения int ограничены 2 миллионами или около того. Должно быть хорошо для большинства файлов, но Что делать, если файл содержит, скажем, 20 миллионов строк? Я пробовал использовать длинный, но без перегрузки Skip() принимает longs.
Линии имеют переменную, неизвестную длину, поэтому я не могу считать байты.
Есть ли опция, которая не включает чтение строки за строкой или разделение файла на куски? Эта операция должна быть очень быстрой.
примечание стороны: чтение 20 миллионов строк текста не может быть «очень быстро». Я не думаю, что это важно, какой код вы пишете, чтобы пропустить строки, поскольку большая часть времени будет потрачена на чтение с диска ... –
Этот вопрос кажется не по теме, поскольку предпосылка этого вопроса ошибочна. Int32 достигает 2 миллиардов. – spender
Linq также имеет метод 'ElementAtOrDefault', который пытается найти запись' N'th в последовательности. Но 'N' по-прежнему является' int' ('Int32'). Вы можете написать свой собственный метод расширения, где он является 'long' (' Int64'). –