web-dev-qa-db-fra.com

Comment enregistrer une chaîne dans un fichier .txt dans Delphi?

Je dois créer un programme qui génère un mot de passe enregistré dans un format de fichier texte dans une destination spécifique que j'ai définie et l'utilisateur doit ouvrir le fichier .txt pour obtenir le mot de passe pour "déverrouiller" un autre programme.

J'ai déjà le code pour générer le mot de passe dans la chaîne sPass et maintenant je dois utiliser la fonction SaveToFile pour l'enregistrer dans le fichier texte que j'ai créé appelé Password.txt mais je ne trouve pas le formulaire général pour utiliser la fonction SaveTo File dans Delphi et moi ne savons pas où mettre le sPass et Password.txt dans la fonction.

Cela devrait être quelque chose comme: SaveToFile (...) mais je ne sais pas comment enregistrer sPass dans Password.txt

Éditer :

Juste une autre question, comment supprimez-vous ce qui est précédemment stocké dans Password.txt avant d'y ajouter la chaîne afin que Password.txt soit vide avant l'ajout de la chaîne? Merci

20
Nyt Ryda

La méthode moderne consiste à créer une liste de chaînes et à l'enregistrer dans un fichier.

procedure MakeAStringlistAndSaveThat;
var
  MyText: TStringlist;
begin
  MyText:= TStringlist.create;
  try
    MyText.Add('line 1');
    MyText.Add('line 2');
    MyText.SaveToFile('c:\folder\filename.txt');
  finally
    MyText.Free
  end; {try}
end;

Notez que Delphi a déjà une classe associée qui fait tout ce que vous voulez: TInifile.
Il stocke les valeurs et les clés dans un key = 'value' format.

passwordlist:= TInifile.Create;
try
  passwordlist.LoadFromFile('c:\folder\passwords.txt');
  //Add or replace a password for `user1`
  passwordlist.WriteString('sectionname','user1','topsecretpassword');
  passwordlist.SaveToFile('c:\folder\passwords.txt');
finally
  passwordlist.Free;
end; {try}

Avertissement
Notez que l'enregistrement de mots de passe non cryptés dans un fichier texte est une faille de sécurité. Il est préférable de hacher vos mots de passe à l'aide d'une fonction de hachage, voir: Cryptage du mot de passe dans Delphi
Pour obtenir des conseils sur la façon de sauvegarder les mots de passe de manière sécurisée.

22
Johan

La manière moderne et moderne consiste à utiliser TFile.WriteAllText dans IOUtils (Delphi 2010 et supérieur)

procedure WriteAllText (const Chemin: chaîne; const Contenu: chaîne); surcharge; statique;

Crée un nouveau fichier, écrit la chaîne spécifiée dans le fichier, puis ferme le fichier. Si le fichier cible existe déjà, il est remplacé.

36
awmross

Vous pouvez utiliser la classe TFileStream pour enregistrer une chaîne dans un fichier:

uses
  Classes;

procedure StrToFile(const FileName, SourceString : string);
var
  Stream : TFileStream;
begin
  Stream:= TFileStream.Create(FileName, fmCreate);
  try
    Stream.WriteBuffer(Pointer(SourceString)^, Length(SourceString));
  finally
    Stream.Free;
  end;
end;

et lire

function FileToStr(const FileName : string):string;
var
  Stream : TFileStream;
begin
  Stream:= TFileStream.Create(FileName, fmOpenRead);
  try
    SetLength(Result, Stream.Size);
    Stream.Position:=0;
    Stream.ReadBuffer(Pointer(Result)^, Stream.Size);
  finally
    Stream.Free;
  end;
end;
16
RRUZ

Manière la plus rapide et la plus simple, pas besoin de déclarer de variables:

with TStringList.Create do
 try
  Add(SomeString);
  SaveToFile('c:\1.txt');
 finally
  Free;
 end;
4
TPAKTOPA