2016-06-23 22 views
-2

Ich benutze Lazarus und ich wollte in eine TXT-Datei speichern, Informationen, wenn das Programm geschlossen ist. Aber jedes Mal, wenn ich das Programm erneut öffne, überschreibt es das, was vorher in der TXT-Datei vorhanden war. Es wäre in Ordnung, sowohl in die nächste Zeile zu schreiben, als auch jedes Mal eine andere TXT-Datei zu erstellen. Dies ist, was ich habe:Lazarus/Delphi (Pascal) - Schreiben in TXT-Datei ohne das nächste Mal zu überschreiben

var 
    ... 
    s: TStringList; 

    s:= TStringList.Create; 
    s.Add(datetostr(now)); 
    s.SaveToFile(datetostr(now)+'.txt'); 
    s.Free; 

aber mir einen Fehler i'ts geben

+0

Öffnen Sie einen Dateistream, suchen Sie bis zum Ende, speichern Sie im Stream –

+0

Wenn Sie einen Fehler haben, können Sie sehen, was es ist. Wir können nicht. Sollen wir raten? Hast du die Fehlermeldung gelesen? Vielleicht hat das Datum als Zeichenfolge Pfadtrennzeichen. Warum müssen wir raten? –

+1

Ich überprüfe alle Compiler-Fehlermeldungen, konnte aber die Fehlermeldung "Ein Fehler" nicht finden. –

Antwort

2

Alles, was Sie tun müssen, ist Ihre Datei im Append-Modus zu öffnen, und fügen Sie dann Ihren Text. Es werden die neuen Daten am Ende der Datei setzen:

AssignFile(tfOut, C_FNAME); 

    try 
    // Open for append, write and close. 
    append(tfOut); 

    writeln(tfOut, 'New data for text file'); 
    writeln(tfOut, 'New informtion should be at the end of the file.'); 

    CloseFile(tfOut); 

    except 
    on E: EInOutError do 
    writeln('File error. Elaboration: ', E.Message); 
    end; 
+0

Die WriteLn in der Ausnahme-Klausel wäre für eine Konsolenanwendung in Ordnung. Wenn die Anwendung des op eine VCL-Anwendung ist, würde es nicht. –

+0

vielen Dank jhonp .. sorry alle für nicht den Fehler zu schreiben .. –

0

Eine andere Methode TStringList ist:

s: TStringList;

s: = TStringList.Create;

s.loadfromfile ('myfile.name');

s.Add (Datumtostr (jetzt));

(oder s.text: = + s.text lineending + DateToStr (jetzt))

s.SaveToFile ('myfile.name');

s.Frei;