Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
675 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: read und write

  Alt 30. Jun 2019, 12:35
Ich Speicher eine Datei..
Delphi-Quellcode:
{$REGION 'function SaveM3UFile'}
function TPlayList.SaveM3UFile(Filename: String; clear: BOOL = false): Boolean;
var
  F: TextFile;
  Buffer: String;
  i: Integer;
begin
  Result := True;
  try
    AssignFile(F, Filename);
    if (FileExists(Filename)) and (not Clear) then
    begin
      Append(F);
    end
    else
    if clear then
      Rewrite(F)
    else
    Rewrite(F);

    Writeln(F, '#EXTM3U');
    for i := 0 to FFile.Count - 1 do
    begin
      Buffer := Format('#EXTINF:%s|%s|%s|%s', [FTime.Strings[i], FTitle.Strings[i],
        FArtist.Strings[i], FAlbum.Strings[i]]);
      Writeln(F, Buffer);
      Writeln(F, FFile.Strings[i]);
    end;
    CloseFile(F);
  except
    CloseFile(F);
    Result := False;
  end;

end;
{$ENDREGION}
Jetzt will ich prüfen ob der Eintrag existiert "EXTM3U" wenn vorhanden soll er nicht nochmals addiert werden.
Er soll einmalig in die erste Zeile addiert wird.
Dachte ich mir ist kein Problem.

Delphi-Quellcode:
    ReadLn(F, Buffer);
    if Buffer = '#EXTM3Uthen
      Continue;
Nur wenn ich schreibe kann ich nicht gleichzeitig lesen.
Wo liegt mein Denkfehler'?

gruss
Dein Fehler ist, dieses uralte Textfile API zu verwenden, das hat halt seine Limitierungen. Z. B. kann man nicht gleichzeitig eine Textdatei lesen und in die gleiche Datei schreiben, weil der IO intern gepuffert wird.

Vergiss das alles, verwende eine TStringlist. Mit stringlist.LoadFromfile kannst Du eine Textdatei laden, die dabei gleich zeilenweise zerlegt wird. Danach kannst du die stringlist nach belieben manipulieren und schließlich per stringlist.Savetofile wieder in eine Datei schreiben. Eine existierende Datei wird dabei überschrieben.
Peter Below
  Mit Zitat antworten Zitat