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

时间:2010-11-16 11:06:28

标签: delphi text-files

.txt文件中创建和保存字符串的最简单方法是什么?

6 个答案:

答案 0 :(得分:17)

使用TStringList

uses
  Classes, Dialogs; // Classes for TStrings, Dialogs for ShowMessage

var
  Lines: TStrings;
  Line: string;
  FileName: string;
begin
  FileName := 'test.txt';
  Lines := TStringList.Create;
  try
    Lines.Add('First line');
    Lines.Add('Second line');
    Lines.SaveToFile(FileName);
    Lines.LoadFromFile(FileName);
    for Line in Lines do
      ShowMessage(Line);
  finally
    Lines.Free;
  end;
end;

同样SaveToFileLoadFromFile可以在Delphi 2009中使用额外的编码以及更新来设置文本编码(Ansi,UTF-8,UTF-16,UTF-16大端)。

答案 1 :(得分:5)

实际上,我更喜欢这个:

var
  Txt: TextFile;
  SomeFloatNumber: Double;
  SomeStringVariable: string;
  Buffer: Array[1..4096] of byte;
begin
  SomeStringVariable := 'Text';
  AssignFile(Txt, 'Some.txt');
  Rewrite(Txt);
  SetTextBuf(Txt, Buffer, SizeOf(Buffer));
  try
    WriteLn(Txt, 'Hello, World.');
    WriteLn(Txt, SomeStringVariable);
    SomeFloatNumber := 3.1415;
    WriteLn(Txt, SomeFloatNumber:0:2); // Will save 3.14
  finally CloseFile(Txt);
  end;
end;

我认为这是最简单的方法,因为此代码不需要类或任何其他单元。它适用于所有Delphi版本,包括 - 如果我没错的话 - 所有.NET版本的Delphi ......


我在这个例子中添加了对SetTextBuf()的调用,这是一个很好的技巧,可以大大加快Delphi中的文本文件速度。通常,文本文件只有128字节的缓冲区。我倾向于将此缓冲区增加到4096字节的倍数。在某些情况下,I'va还实现了我自己的TextFile类型,允许我使用这些“控制台”功能将文本写入备忘录字段,甚至是另一个外部应用程序!在this location是我在2000年编写的一些示例代码(ZIP),并且只是进行了修改以确保它与Delphi 2007一起编译。但是不确定是否有更新的Delphi版本。再说一遍,这段代码已经有10年的历史了。
这些控制台功能一直是Pascal语言的标准,因为它开始了所以我不希望它们很快消失。但是,TtextRec类型将来可能会被修改,因此我无法预测此代码将来是否会起作用...有些解释:

  • WA_TextCustomEdit.AssignCustomEdit允许将文本写入基于CustomEdit的对象,如TMemo。
  • WA_TextDevice.TWATextDevice是一个可以放在表单上的类,它包含可以对所写数据执行某些操作的事件。
  • 我使用WA_TextLog.AssignLog为每行文本添加时间戳。
  • WA_TextNull.AssignNull基本上是一个虚拟文本设备。它只会丢弃你写的任何内容。
  • WA_TextStream.AssignStream将文本写入任何TStream对象,包括内存流,文件流,TCP / IP流以及您拥有的任何其他内容。

链接中的代码特此授权为CC-BY alt text


哦,带有ZIP文件的服务器功能不是很强大,所以每天往往会丢失几次。对不起。

答案 2 :(得分:5)

Delphi 2010中引入的IOUtils单元为写入/读取文本文件提供了一些非常方便的功能:

//add the text 'Some text' to the file 'C:\users\documents\test.txt':
TFile.AppendAllText('C:\users\documents\text.txt', 'Some text', TEncoding.ASCII);

答案 3 :(得分:4)

或者,如果您使用的是较旧版本的Delphi(没有for line in lines方法来迭代字符串列表):

var i : integer;
begin

...
try
    Lines.Add('First line');
    Lines.Add('Second line');
    Lines.SaveToFile(FileName);
    Lines.LoadFromFile(FileName);
    for i := 0 to Lines.Count -1 do
      ShowMessage(Lines[i]);
  finally
    Lines.Free;
  end;

答案 4 :(得分:1)

如果您使用的是Delphi版本> = 2009,请查看TStreamWriter课程。

它还会处理文本文件编码和换行符。

答案 5 :(得分:1)

procedure String2File;
var s:ansiString;
begin
    s:='My String';
    with TFileStream.create('c:\myfile.txt',fmCreate) do
    try
      writeBuffer(s[1],length(s));
    finally
      free;
    end;
end;

使用unicode字符串时需要小心....