C Удаляют первую строку из текстового файла, не переписывая файл

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

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

Таким образом, как я иду об удалении их?

6
задан Brian Tompsett - 汤莱恩 6 July 2015 в 18:49
поделиться

5 ответов

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

6
ответ дан 16 December 2019 в 21:37
поделиться

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

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

0
ответ дан 16 December 2019 в 21:37
поделиться

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

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

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

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

2
ответ дан 16 December 2019 в 21:37
поделиться

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

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

0
ответ дан 16 December 2019 в 21:37
поделиться

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

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

0
ответ дан 16 December 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: