Problem mam z nadpisaniem piku txt by linie w Memo były kolejnymi liniami pliku txt o ile takowy wskaże za pomocą saveDirectory jeśli nie zapisuje się jako nowy plik
Ogarnij się w końcu - nadpisanie pliku jest równoznaczne ze skasowaniem jego bieżącej zawartości i zapisaniem nowej, a dopisanie pozwala zachować bieżącą zawartość, a nowy fragment danych umieścić po tym istniejącym;
Jak chcesz sprawdzić czy wybrany za pomocą SaveDialog
plik istnieje na dysku, użyj funkcji FileExists
:
if SaveDialog.Execute() then
if FileExists(SaveDialog.FileName) then
begin
// wybrany plik istnieje - trzeba dopisać nowe dane na jego końcu
end
else
begin
// wybrany plik nie istnieje - można zapisać dane bezpośrednio do pliku
end;
Samo dopisanie nowych danych na końcu bieżącej zawartości pliku można zrealizować na wiele sposobów; Najprostszym z nich jest utworzenie sobie pomocniczej listy typu TStringList
, załadowanie do niej bieżącej zawartości pliku, następnie dopisanie do tej listy zawartości Memo
(np. za pomocą metody AddStrings
) i na koniec zapisanie tej pomocniczej listy do pliku docelowego;
Rozwijając poprzedni kod, całość powinna wyglądać mniej więcej tak:
var
LFileContent: TStringList;
begin
if SaveDialog.Execute then
if FileExists(SaveDialog.FileName) then
begin
LFileContent := TStringList.Create();
try
LFileContent.LoadFromFile(SaveDialog.FileName);
LFileContent.AddStrings(Memo.Lines);
LFileContent.SaveToFile(SaveDialog.FileName);
finally
LFileContent.Free();
end;
end
else
Memo.Lines.SaveToFile(SaveDialog.FileName);
end;