SaveDialog nadpisanie pliku tekstowego z memo

0

Cześć

Jak za pomocą SaveDialogs nadpisać plik tekstowy z memo

Czyli wskazuje w oknie na plik i zamiast utworzyć nowy o takiej samej nazwie nadpisuję go (dodaje kolejne linie z memo.

procedure TForm3.NadpiszPlik1Click(Sender: TObject);
 begin
  if SaveDialog1.Execute then
   memo1.Lines.SaveToFile(SaveDialog1.FileName);
 end;
0

Jeśli wybrany plik istnieje (FIleExists), musisz go otworzyć/wczytać i dopisać linie na jego koniec.

0
  1. nadpisanie to jest ZASTĄPIENIE starego nowym, więc dokładnie to co robisz. To co chcesz uzyskać to DOPISANIE
  2. jak już napisał Patryk musisz "ręcznie" dopisać na końcu pliku. Można to zrobić zwykłym Assign Append Append albo TFileStream
0

Możesz zrobić tak jak pisali przedmówcy lub najpierw wczytać wartość pliku do TMemo poprzez

 TMemo.Lines.LoadFromFile()

i później tylko zapisać TMemo do pliku tak jak to robisz teraz ;)
Różnica jest taka, że będziesz jednocześnie mógł zmieniać cały plik, a nie skupiać się tylko na ostatniej linii.

0

Dziękuje ślicznie za rady czyli mam otworzyć fizycznie OpenDialog i ręcznie nadpisać
wybaczcie dopiero zaczynam obsługę plików a potrzebuje właśnie nadpisać
jakoś nie umiem tego w savedialogs poskładać

0

Należy edytować plik:
Pliki
Ścieżkę do pliku bierzesz z SaveDialog.FileName, otwierasz ten plik do edycji, a następnie w pętli za pomocą procedury Writeln zapisujesz (dopisujesz na końcu) kolejne wiersze z TMemo.

0

Dzięki za pomoc i Szczęśliwego Nowego Roku :)

Niestety ugrzęzłem z tym dla Was to proste ale ktoś kto zaczyna to czasami jest porażka.
Kombinuje na wszystkie sposoby no nic będzie bez nadpisywania może przejdzie,
każdemu wolno mieć zaćmienie umysłu :)

0

Pokaż jak kombinowałeś, pomożemy dalej - poddając się, niewiele z tego wszystkiego wyniesiesz, poza zmarnowanym czasem.

0

Teraz to już nie ma co pokazać teraz to już jest frustracja teraz bez zastanowienia sam wiem że czego nie zrobię nie ma racji bytu.
Jutro się dowiem na zajęciach i powiem k.... gdzie ja miałem głowę ale dzięki naprawdę i rady
Pozdrawiam

0

Jak za pomocą SaveDialogs nadpisać plik tekstowy z memo

Po pierwsze, SaveDialog nie służy do jakichkolwiek operacji na plikach (modyfikacji, nadpisywania czy dopisywania); Komponent ten umożliwia jedynie otwarcie systemowego okienka do wyboru lokalizacji, dając użytkownikowi podgląd na zawartość jego dysku; Wybrana lokalizacja dostępna jest w postaci zwykłej ścieżki - to tyle, nic więcej;

Po drugie, komponent Memo nie jest w żaden sposób połączony z jakimkolwiek plikiem i nie ma żadnej wiedzy o tym, skąd pochodzi zawarty w nim tekst; Komponent ten może mieć tekst załadowany z dowolnego źródła (strumienia, pliku), może też mieć ten tekst wpisany przez użytkownika lub wklejony ze schowka;

Tak więc masz trzy osobne elementy:

  • Memo z tekstem, który ma zostać zapisany do pliku,
  • SaveDialog, umożliwiający wybranie lokalizacji i nazwy pliku docelowego,
  • plik na dysku, który może zostać nadpisany lub nie;

Aby umożliwić użytkownikowi zapis zawartości Memo do pliku, którego lokalizacja oraz nazwa wybrane zostaną przez SaveDialog, wystarczy poniższy kawałek kodu (zakładając, że SaveDialog jest komponentem umieszczonym na formularzu):

if SaveDialog.Execute() then
  Memo.Lines.SaveToFile(SaveDialog.FileName);
0

To Mam podałem w pierwszym poście w pytaniu ale dziękuję za chęci :)

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

Przepraszam źle przeczytałem więc pozostaje tylko za każdym razem wczytywanie zawartości pliku do Memo i jego dopisanie dopisanie za pomocą okna się tego nie zrobi

1

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;

1 użytkowników online, w tym zalogowanych: 0, gości: 1