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

String 如何在Delphi中将字符串保存到.txt文件中?,string,delphi,delphi-7,text-files,String,Delphi,Delphi 7,Text Files,我需要制作一个程序,生成一个密码,该密码以文本文件格式保存在我设置的特定目标中,用户需要打开.txt以获取另一个程序的“解锁”密码 我已经获得了在字符串sPass中生成密码的代码,现在我需要使用SaveToFile函数将其保存到我创建的名为password.txt的文本文件中,但我在Delphi中找不到使用SaveTo file函数的一般形式,我不知道在函数中放置sPass和password.txt的位置 它应该类似于:SaveToFile(…),但我不知道如何在Password.txt中保存S

我需要制作一个程序,生成一个密码,该密码以文本文件格式保存在我设置的特定目标中,用户需要打开.txt以获取另一个程序的“解锁”密码

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

它应该类似于:SaveToFile(…),但我不知道如何在Password.txt中保存SPAS

编辑:


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

现代的方法是创建一个stringlist并将其保存到文件中

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;
请注意,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}
警告
请注意,在文本文件中保存未加密的密码是一种安全漏洞。最好使用哈希函数对密码进行哈希运算,请参见:

有关如何以安全方式保存密码的提示

您可以使用
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;
阅读

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;

现代的方法是在IOUtils(Delphi 2010及更高版本)中使用
TFile.writealText

过程WriteAllText(常量路径:字符串;常量内容:字符串); 超载;静态

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


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

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

使用“MyText.SaveToFile('c:\folder\filename.txt');”,我无法使用它,因为我无法找到它将保留在哪个目录中,因为我将使用多台计算机来测试它,并且我的flashdrive(我将存储它)的目录每次都会不同,即它可能是e一次,然后是F在另一台pc上,然后,在另一个etcSo上,您必须检查启动应用程序的文件夹位置。这应该不会太难
TIniFile
不是
TStrings
的后代。我使用TStringList方式,在找到程序exe所在的目录后,它工作得非常好。谢谢大家,你们总是很乐于助人!Application.ExeName包含exe文件的路径。这很有趣,我不知道有这样的函数。谢谢!可能有一些错误。。。如果文件“c:\1.txt”不可写,您将得到一个异常,并且free将不会执行,因此您可能希望使用try finally construct.Agree,added try..finally block。使用with比缺少本地变量增益更有害-1我通常使用这种结构进行调试,在任何地方插入代码都很快。另外,如果它很短,并且您没有在block中做额外的工作,那么它就没有问题。对于大块头我也不喜欢,因为它很容易导致不可预测的情况。