У меня есть сервис, который работает все время и также сохраняет файл журнала. Это в основном добавляет новые строки к файлу журнала каждые несколько секунд. Я записан маленький файл, который читает эти строки и затем анализирует их к различным действиям. Вопрос, который я имею, состоит в том, как я могу удалить строки, которые я уже проанализировал от файла журнала, не разрушая запись файла журнала сервисом?
Обычно, когда я должен удалить строку в файле затем, я открываю исходный и временный, и затем я просто пишу все строки во временный файл кроме оригинала, который я хочу удалить. Очевидно, этот метод не будет слово здесь.
Таким образом, как я иду об удалении их?
В наиболее часто используемых файловых системах нельзя удалить строку с начала файла без перезаписи всего файла. Я бы посоветовал вместо одного большого файла использовать много маленьких файлов и чередовать их, например, один раз в день. Старые файлы удаляются, когда они больше не нужны.
Я не уверен, но думаю так: Новая строка - это символ, поэтому вы должны удалить символы для этой строки + символ новой строки Кстати, «перемещение» всех символов назад (чтобы перезаписать старую строку) похоже на копирование каждого символа в другую позицию и удаление их из их старой позиции
Так что нет, я не думаю, что вы можете просто удалить строку, вы надо переписать весь файл.
К сожалению, невозможно обойтись без перезаписи файла на месте или в виде отдельного файла.
Одна вещь, на которую вы , возможно, захотите обратить внимание, - это сохранить указатель в другом файле, указав позицию первой необработанной строки.
Затем ваш процесс просто открывает файл и ищет в этом месте, обрабатывает несколько строк, а затем обновляет указатель.
В какой-то момент вам все равно придется пролистывать файлы, чтобы они не продолжали расти вечно.
Вы не можете, просто файлы работают не так.
Похоже, вам нужна какая-то служба / библиотека регистрации сообщений, к которой ваша программа могла бы подключиться, чтобы регистрировать сообщения, которые затем могли бы скрыть основные детали открытия / закрытия файлов и т. Д.
Если каждая строка журнала имеет уникальный идентификатор (или даже просто номер строки), вы можете просто сохранить в своем анализе журнала идентификатор, до которого вы выполняли синтаксический анализ. Таким образом, вам не нужно ничего менять в файле журнала.
Если файл журнала затем начинает становиться слишком большим, вы можете переключаться на новый каждый день (например).