How to save string into text files in Delphi?
创建字符串并将其保存到
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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; |
另外,
Delphi2010中引入的ioutils单元为编写/读取文本文件提供了一些非常方便的功能:
1 2 | //add the text 'Some text' to the file 'C:\users\documents\test.txt': TFile.AppendAllText('C:\users\documents\text.txt', 'Some text', TEncoding.ASCII); |
。
实际上,我更喜欢这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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版本,包括所有Delphi的.NET版本…
我在这个例子中添加了一个对setextbuf()的调用,这是一个很好的技巧,可以大大提高Delphi中文本文件的速度。通常,文本文件的缓冲区只有128个字节。我倾向于将这个缓冲区增加到4096字节的倍数。在一些情况下,我还实现了自己的文本文件类型,允许我使用这些"控制台"功能将文本写入备忘录字段,甚至写入另一个外部应用程序!在这个位置有一些我在2000年编写的示例代码(zip),只是进行了修改,以确保它能与Delphi2007一起编译。不过,不确定新的Delphi版本。同样,这段代码已经有10年的历史了。
自从Pascal语言开始以来,这些控制台功能一直是Pascal语言的标准,因此我不希望它们很快消失。但是,TTextrec类型可能在将来被修改,因此我无法预测此代码是否在将来工作…一些解释:
- wa text customedit.assigncustomedit允许将文本写入基于customedit的对象,如tmemo。
- wautextdevice.twatextdevice是一个可以放到表单上的类,其中包含一些事件,您可以在其中对写入的数据执行某些操作。
- wa textlog.assignlog被我用来向每行文本添加时间戳。
- wa_textnull.assignnull基本上是一个虚拟文本设备。它只是丢弃你给它写的任何东西。
- wa textstream.assignstream将文本写入任何tstream对象,包括内存流、文件流、TCP/IP流以及您拥有的其他内容。
链接中的代码在此由授权为CC-
哦,有zip文件的服务器不是很强大,所以它每天都会停机几次。很抱歉。
或者,如果您使用的是旧版本的Delphi(它没有迭代字符串列表的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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; |
号
1 2 3 4 5 6 7 8 9 10 11 | 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字符串时需要注意….
如果您使用的是Delphi版本>=2009,请看一下
它还将处理文本文件编码和换行符。