К сожалению, вы не можете обрезать / перезаписать строки в начале файла, не переписав все это.
Новое предложение
Я только что подумал о новом подходе, который может помочь вам ...
Вы можете добавить к вашему файлу небольшой заголовок, имеющий следующую структуру.
Редактировать: Мусор, я только что описал вариант кольцевого буфера !
Поля заголовка
Bytes 00 - 07 (long)
- Общее (текущее) количество строк, записанных в файл.
Bytes 08 - 15 (long)
- Указатель на начало «фактической» первой строки вашего файла. Первоначально это будет байт после окончания заголовка, но он изменится позже, когда данные будут переопределены.
Bytes 16 - 23 (long)
- Длина «конечной секции» файла. Опять же, изначально он будет равен нулю, но изменится позже, когда данные будут переопределены.
Алгоритм чтения (псевдокод)
Читает весь файл.
Read the header field that points to the start of the "actual" first line
Read the header field that specifies the length of the "end section"
Read every line until the end of the file
Seek to the byte just after the end of the header
Read every line until the "end section" has been fully read
Алгоритм записи (псевдокод)
Записывает произвольное количество новых строк в файл.
Read the header field that contains the total no. of lines in the file
If (line count) + (no. of new lines) <= (maximum no. of lines) Then
Append new lines to end of file
Increment header field for line count by (no. of ne lines)
Else
Append as many lines as possible (up to maximum) to end of file
Beginning at pointer to first line (in header field), read as many lines as still need to be written
Find the total byte count of the lines just read
Set the header field that points to the first line to the next byte in the stream
Keep writing the new lines to the end of the file, each at a time, until the byte count of the remaining lines is less than the byte count of the lines at the beginning of the file (it may be that this condition is true immediately, in which case you don't need to write any more)
Write the remaining new lines to the start of the file (starting at the byte after the header)
Set the header field that contains the length of the "end section" of the file to the number of bytes just written after the header.
Не очень простой алгоритм, я полностью признаю! Тем не менее, я думаю, что это довольно элегантно. Дайте мне знать, если что-то из этого не ясно, конечно. Надеюсь, он должен делать именно то, что вы хотите сейчас.
Оригинальное предложение
Теперь, если вам гарантировано, что строки имеют постоянную длину (в байтах), вы можете достаточно просто вернуться к подходящей точке и перезаписать существующие данные. Однако это может показаться маловероятной ситуацией. Если вы не возражаете против наложения ограничения на максимальную длину ваших строк и дополнительного дополнения каждой строки, которую вы пишете, до этой максимальной длины, то это может облегчить вам задачу. Тем не менее, у него есть свои недостатки, такие как значительное увеличение размера файла при определенных обстоятельствах (то есть большинство строк значительно короче, чем максимальная длина.) Все зависит от ситуации, является ли это приемлемым или нет ...
Наконец, вместо этого вы можете захотеть взглянуть на использование существующей системы ведения журнала, в зависимости от ваших конкретных целей.