C Удалить первую строку из текстового файла без перезаписи файла. - PullRequest
6 голосов
/ 17 апреля 2010

У меня есть служба, которая работает все время, а также хранит файл журнала. Он добавляет новые строки в файл журнала каждые несколько секунд. Я написал небольшой файл, который читает эти строки, а затем анализирует их для различных действий. У меня вопрос: как я могу удалить строки, которые я уже проанализировал, из файла журнала, не прерывая запись файла журнала службой?

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

Итак, как мне их удалить?

Ответы [ 5 ]

6 голосов
/ 17 апреля 2010

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

2 голосов
/ 17 апреля 2010

К сожалению, это невозможно сделать без перезаписи файла, либо на месте, либо в виде отдельного файла.

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

Затем ваш процесс просто открывает файл и ищет в этом месте, обрабатывает некоторые строки, а затем обновляет указатель.

Вам все равно придется пролонгировать файлы в какой-то момент, чтобы они не росли вечно.

0 голосов
/ 17 апреля 2010

Если каждая строка журнала имеет уникальный идентификатор (или даже просто номер строки), вы можете просто сохранить в своем лог-анализе идентификатор, до которого вы получили анализ.Таким образом, вам не нужно ничего менять в файле журнала.

Если файл журнала становится слишком большим, вы можете переключаться на новый каждый день (например).

0 голосов
/ 17 апреля 2010

Вы не можете, просто так не работают файлы.

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

0 голосов
/ 17 апреля 2010

Я не уверен, но я так думаю: Новая строка является символом, поэтому вы должны удалить символы для этой строки + символ новой строки Кстати, «перемещение» всех символов назад (чтобы перезаписать старую строку) похоже на копирование каждого символа в другую позицию и удаление его из старой позиции

Так что нет, я не думаю, что вы можете просто удалить строку, вам следует переписать весь файл.

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