Модификация или удаление строки из текстового файла низкоуровневым способом?

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

Каждая строка в этом файле содержит имя и знак равенства, а остальные - данные. Например,SOMEUNIQUENAME=SomeStringValue, Я намерен держать файл открытым в течение некоторого времени внутри потока. Этот поток выполняет входящие запросы для получения, установки или удаления определенных полей данных. я используюWriteLn а такжеReadLn в цикле, оцениваяEOF, Ниже приведен пример того, как я читаю данные:

FFile = TextFile;

...

function TFileWrapper.ReadData(const Name: String): String;
var
  S: String; //Temporary line to be parsed
  N: String; //Temporary name of field
begin
  Result:= '';
  Reset(FFile);
  while not EOF(FFile) do begin
    ReadLn(FFile, S);
    N:= UpperCase(Copy(S, 1, Pos('=', S)-1));
    if N = UpperCase(Name) then begin
      Delete(S, 1, Pos('=', S));
      Result:= S;
      Break;
    end;
  end;
end;

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

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

procedure TFileWrapper.WriteData(const Name, Value: String);
var
  S: String; //Temporary line to be parsed
  N: String; //Temporary name of field
begin
  Result:= '';
  Reset(FFile);
  while not EOF(FFile) do begin
    ReadLn(FFile, S);
    N:= UpperCase(Copy(S, 1, Pos('=', S)-1));
    if N = UpperCase(Name) then begin
      //How to re-write this line?
      Break;
    end;
  end;
end;

procedure TFileWrapper.DeleteData(const Name: String);
var
  S: String; //Temporary line to be parsed
  N: String; //Temporary name of field
begin
  Result:= '';
  Reset(FFile);
  while not EOF(FFile) do begin
    ReadLn(FFile, S);
    N:= UpperCase(Copy(S, 1, Pos('=', S)-1));
    if N = UpperCase(Name) then begin
      //How to delete this line?
      Break;
    end;
  end;
end;

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

Ответы на вопрос(3)

Ваш ответ на вопрос