Узнать кол-во строчек в файле как?
Как можно узнать кол-во строчек в файле, но не извлекая его (файл) построчно и считая. Более быстрый способ есть?
Ну извлекать их все равно прийдется, но можно воспользоваться стандартыми методами:
сoздаешь объект TListString *MyList,
делаешь MyList->LoadFromFile("xxx.hot"),
определяешь размер length=MyList->Count.
Как можно узнать кол-во строчек в файле, но не извлекая его (файл) построчно и считая. Более быстрый способ есть?
Не хочешь извлекать построчно ?
Извлекай блоками в буфер и выполняй подсчет символов 10 и 13 - перевод каретки и возврат
(они идут парой)
Если тебя волнует скорость то насколько я помню в АСМе есть функции для операций со строками байтов в памяти...
При сохранении файла на диске у содержимого описывается общий размер но не количество строк...
может есть какая функция в библиотеках которая считает строки, но она все равно будет считывать весь файл.
Т.е. кроме как считывать построчно узнать кол-во строк никак нельзя? Памяти тоже очень жалко.
У меня есть файл в ~40000 строк (лог). Если я его обрабатываю (построчно), то это долго, но в тоже время если я его открываю (чтение, редактирование), допустим в FAR'е, то тот довольно быстро показывает кол-во строк.
Т.е. кроме как считывать построчно узнать кол-во строк никак нельзя? Памяти тоже очень жалко.
Наверное я тупо объяснил если ты опять спрашиваешь :-(
Если ты действительно читаешь из файла по строкам то это тормоза жуткие... уж не знаю чем ты это делаешь (хоть бы код привел что ли...)
но при каждой операции считывания с диска читается минимум сектор это 512 байт... если ты делаешь эту операцию только ради чтения одной строки которая к примеру у тебя в среднем 50 байт то ты уже снижаешь потенциальную скорость своей программы в 10 раз ... В виндовз обычно кластера состоят из нескольких секторов и получается что если ты считываешь из файла по строкам то тормозишь свою прогу в сотни раз...
к примеру минута у тебя превращается в часы...
из файла нужно читать в буфер в оперативке
например его размер 4 килобайта минимум и уже потом в этом буфере считай строки... потом в этот же буфер считывай следующую часть файла в 4 килобайта снова считай строки и т.д.
но сначала проверь в описаниях стандартных функций C++ для работы с файлами, может какая из них это и умеет...