如何在Delphi中将字符串保存到.txt文件?

Nyt*_*yda 20 delphi string delphi-7 text-files

我需要制作一个程序,生成一个以我设置的特定目的地以文本文件格式保存的密码,并且用户需要打开.txt以获取密码以"解锁"另一个程序.

我已经有了在字符串sPass中生成密码的代码,现在我需要使用SaveToFile函数将其保存到我创建的名为Password.txt的文本文件中,但我找不到使用SaveTo文件函数的一般表单Delphi和我不知道将sPass和Password.txt放在函数中的哪个位置.

它应该是这样的:SaveToFile(...)但我不知道如何在Password.txt中保存sPass

编辑:

还有一个问题,在添加字符串之前,如何删除以前存储在Password.txt中的内容,以便在添加字符串之前Password.txt为空?谢谢

awm*_*oss 38

现代现代方式是TFile.WriteAllText在IOUtils中使用(Delphi 2010及以上版本)

procedure WriteAllText(const Path:string; const Contents:string); 超载; 静态的;

创建一个新文件,将指定的字符串写入该文件,然后关闭该文件.如果目标文件已存在,则会被覆盖.


Joh*_*ica 22

现代的方法是创建一个字符串列表并将其保存到文件.

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;
Run Code Online (Sandbox Code Playgroud)

请注意,Delphi已经有了一个相关的类,可以执行您想要的任何操作:TInifile.
它以一种key = 'value'格式存储值和键.

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}
Run Code Online (Sandbox Code Playgroud)

警告
请注意,在文本文件中保存未加密的密码是安全漏洞.最好使用散列函数散列密码,请参阅:Delphi中的密码加密
有关如何以安全方式保存密码的提示.


RRU*_*RUZ 16

您可以使用TFileStream该类将字符串保存到文件:

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;
Run Code Online (Sandbox Code Playgroud)

并阅读

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;
Run Code Online (Sandbox Code Playgroud)


TPA*_*OPA 6

最快最简单的方法,不需要声明任何变量:

with TStringList.Create do
 try
  Add(SomeString);
  SaveToFile('c:\1.txt');
 finally
  Free;
 end;
Run Code Online (Sandbox Code Playgroud)

  • 使用 with 比缺少本地 vars 收益更糟糕。-1 (2认同)