2016-06-23 2 views
-2

J'utilise Lazarus et je voulais enregistrer dans un fichier txt, des informations lorsque le programme est fermé. Mais chaque fois que je rouvre le programme, il écrase ce qu'il y avait avant dans le fichier txt. Il serait correct à la fois d'écrire sur la ligne suivante ou même de créer un fichier txt différent à chaque fois. Voilà ce que j'ai:lazarus/delphi (pascal) - écrire au fichier txt sans écraser la prochaine fois

var 
    ... 
    s: TStringList; 

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

mais i'ts me donner une erreur

+0

Ouvrir un flux de fichier, chercher à la fin, enregistrer dans le flux –

+0

Si vous avez une erreur, vous pouvez voir ce que c'est. Nous ne pouvons pas. Devons-nous deviner? Avez-vous lu le message d'erreur? Peut-être que la date en tant que chaîne a des séparateurs de chemin. Pourquoi avons-nous besoin de deviner. –

+1

Je vérifie tous les messages d'erreur du compilateur mais je n'ai pas pu trouver le message "une erreur". –

Répondre

2

Tout ce que vous devez faire est d'ouvrir votre fichier en mode append, puis ajoutez votre texte. Il mettra les nouvelles données à la fin du fichier:

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

WriteLn dans la clause except serait parfait pour une application console. Si l'application de l'op est une application VCL, ce n'est pas le cas. –

+0

merci beaucoup jhonp .. désolé tout le monde pour ne pas avoir écrit l'erreur .. –

0

Une autre méthode utilisant TStringList est:

s: TStringList;

s: = TStringList.Create;

s.loadfromfile ('myfile.name');

s.Ajouter (datetostr (maintenant));

(ou s.text: = s.text + + lineEnding DateToStr (maintenant))

s.SaveToFile ('myfile.name');

s.Free;