Как получить количество строк без чтения файла до конца - PullRequest
15 голосов
/ 26 сентября 2011

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

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

* 1005 Bests *

Ответы [ 3 ]

21 голосов
/ 26 сентября 2011

Нет.Вы должны прочитать файл.Если вы хотите записать файл быстро, не считая, сохраните его в начале файла или в отдельном файле.

Обратите внимание, что вы можете передавать файл в потоковом режиме, и он удивительно быстр:

int count = File.ReadLines(path).Count();

Потому что в некоторых случаях я мог бы получить общее количество строк и сравнить его с текущей строкой, чтобы отобразить процент, а просто для отображения процента может быть глупым сначала прочитать всеСодержимое, затем прочитайте его, чтобы снова отобразить необработанный текст у пользователя.

13 голосов
/ 26 сентября 2011

Нет, другого пути нет.

Файл не основан на строках (или даже на символах), поэтому метаинформация о количестве строк (или даже количестве символов) отсутствует.Единственными метаданными о содержимом является длина в байтах.

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

5 голосов
/ 26 сентября 2011

Как сказали Гуффа и Джейсон, нет способа получить строчки, кроме прочтения до конца.

Чтобы решить вашу проблему по-другому:

Если вас интересует только процентное отображение, вы МОЖЕТЕ попытаться накопить это значение из общего размера файла и текущей строки. Вам нужно применить некоторые приемы вуду, чтобы получить фактическое чтение байтов (например, вы прочитали строку 10 и всего 200 байтов или что угодно), а размер файла составляет 400 байтов. Вы, вероятно, можете догадаться, что вы на 50%, без необходимости знать общий номер строки.

Вот только некоторые случайные числа, кстати.

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