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 = '#EXTM3U' then
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.