Пропуск строк и вычисление их размера
P.s. подозреваю, что здесь поможет функция seek за счет какого-нибуддь хитрого использования. Спасибо.
При нахождении конца строки не составляет труда посчитать её длину.
Посчитав длину одной строки не сложно определить размер всех пропущенных строк.
Так в чем именно проблема?
А другого варианта нахождения конца строки, кроме как её чтением (перебором её символов), нет. Ну если ты, конечно, заранее не получаешь её длину.
Ну и как ты собираешься их искать без поиска по символам?
Он тоже не используем черную магию, а перебирает символы.
for(int i = 0; i<14; i++)
{
char b[500];
curSize += file.readLine(b,sizeof(b));
}
for(int i = 0; i<14; i++)
{
char b[500];
curSize += file.readLine(b,sizeof(b));
}
Если ты считаешь, что этот код пропускает определенное число строк, - ты ошибаешься.
Не факт что строка меньше 500 символов.
посимвольно
Цикл в общем случае, все равно, придется организовывать, только читать надо сразу блоками.
Можно ещё сделать отображение файла.Но это так,к слову
Файловые операции одни из самых медленных - поэтому по возможности их количество необходимо сводить к минимуму - если критична скорость выполнения. Поэтому если речь идет о оптимизации по скорости - то оптимально читать блоками по размеру кластера (по крайней мере для файловых систем FAT/FAT32/NTFS) - а никак не строками. А если хочется строками - то не надо мучатся на счет скорости.
Если файл кешируется операционной системой, разве имеет значение, буду ли я читать из файла с учетом размера кластера или просто буду читать большими блоками? Я предполагал, что имеет значение только количество вызовов системной функции, возвращающей блок данных, и все следует сводить к минимизации этих вызовов. Разве не так?
Я думаю, что существенного выигрыша может и не быть - по крайней мере если буфер действительно большой.
В реальном приложении на самом деле вы можете получить существенный выигрыш при первом обращении, можете не получить - тут пробуйте самостоятельно - дисковые операции зависят от многих факторов в ОС - но в большинстве файловых систем размер читаемых данных=равно размеру кластера.