2014-10-28 4 views
0

Предположим, у меня действительно большой текстовый файл, скажем 100 миллионов строк или 1 ГБ, и я хочу удалить последнюю строку. Нужно ли вообще сделать это, не переписывая 99,999,999 строк в новый файл и удаляя старый? Предположим, что файл действительно очень большой, что опция перезаписи является чрезмерно дорогой. Что бы вы сделали, чтобы удалить последнюю строку? Спасибо.Как удалить последнюю строку в текстовом файле со 100 М строк без перезаписи всего файла?

+0

Изменение размера файла меньшего размера? – Yakk

+0

Какую ОС вы нацеливаете? Кросс-платформенный? – gmas80

ответ

2

Вы должны использовать функцию усечения, но ни FILE*, ни iostream не поддерживают ее.

Однако на нижнем уровне обычно существуют функции, специфичные для ОС, для обрезания файла.

Если вы используете Unix, вы можете использовать ftruncate, но вам нужно найти смещение, в котором вы хотите сначала усечь (имеет ли каждая строка фиксированный размер?).

Будьте осторожны, если вы обнаружили FILE* для нахождения смещения, вам необходимо убедиться в его синхронизации с нижним уровнем. Вы можете просто fclose файл, затем снова открыть его с открытым для ftruncate файла с заданным смещением.

Похожие вопросы: https://stackoverflow.com/a/873653/2741329 и https://stackoverflow.com/a/15154682/2741329

Смежные вопросы