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

mic*_*eal 11 delphi text-files

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

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

此外SaveToFile,LoadFromFile还可以在Delphi 2009中使用额外的编码以及更新的文本编码(Ansi,UTF-8,UTF-16,UTF-16大端).

  • 是.这是迄今为止最简单的方法.`TStringList`对象不仅易于使用且功能强大,而且整个VCL中也使用了`TStrings`,因此所有组件都可以通过分配字符串列表来相互通信.我只是想提一下使用文本文件的替代方法(所有这些都比这更困难,但只是为了完整性).请参阅http://stackoverflow.com/questions/3538156/file-io-in-every-programming-language/3538227#3538227 (4认同)

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

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


我已经在这个例子中添加了对SetTextBuf()的调用,这是一个很好的技巧来加速Delphi中的文本文件.通常,文本文件只有128字节的缓冲区.我倾向于将此缓冲区增加到4096字节的倍数.在某些情况下,I'va还实现了我自己的TextFile类型,允许我使用这些"控制台"功能将文本写入备忘录字段,甚至是另一个外部应用程序!在这个位置是我在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许可 替代文字


哦,带有ZIP文件的服务器不是很强大,所以它往往每天都要停机几次.对于那个很抱歉.

  • 请注意,控制台操作(如读写,有unicode问题,因此建议使用TStringList). (6认同)

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