如何在Delphi中创建一个文本文件

3

我有一个程序,用户在我的程序中注册后会创建一个文本文件。我尝试使用CreateFile函数,但不确定参数该如何设置。我应该如何使用这个或其他函数为每个用户创建一个文本文件?


你可以使用 TFileStream,或者在控制台应用程序中使用 WriteLn,或者如果文件不太大(几百兆以下),可以使用 TStringList.SaveToFile。这里有很多关于使用这些方法的现有帖子;搜索一下并决定哪种方法最适合你的特定需求。通常情况下,不需要使用低级API代码(如 CreateFile)来进行简单的文本文件输出。 - Ken White
据我所知,如果你将内容写入文本文件而不是控制台,你也可以在非控制台应用程序中使用Writeln。但是我会使用TBufferedFileStream和TTextWriter,或者像Andreas的回答中那样使用TStringList。 - Rudy Velthuis
4个回答

6
也许您可以创建一个字符串列表并将其保存到文件中:
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;

1
@joel_kruger:如果它起作用了,那就应该接受这个答案。 - Rudy Velthuis

5

有几种方法可以将两行写入文本文件:

使用 TFile:

fn := 'out.txt';

// method 1
TFile.WriteAllLines(fn, ['Line1','Line2']);

// method 2
TFile.WriteAllText(fn, 'Line1'+sLineBreak+'Line2');

// method 3
TFile.WriteAllText(fn, 'Line1');
TFile.AppendAllText(fn, sLineBreak);
TFile.AppendAllText(fn, 'Line2');

使用 TStringList

const fn := 'out.txt';
var sl := TStringList.Create;
try
  sl.Add('Line1');
  sl.Add('Line2');
  sl.SaveToFile(fn);
finally
  sl.Free;
end;

3

最简短的答案:

FileCreate('filename.txt');
FileCreateSystem.SysUtils中声明,实际上是一个返回THandle的函数。(当您在调用时不进行赋值时,返回值将被简单地丢弃。)
我只是展示了上面的代码以便更加简洁;大多数情况下忽略返回值并不是好的编程实践。特别是在这种情况下,您绝对需要它进一步使用。
如果调用不成功,则返回值为INVALID_HANDLE_VALUE,否则它保存了新创建文件的文件句柄。即使您不需要立即使用该文件,您也需要该句柄:在调用FileClose函数释放句柄之前,该文件将无法访问。因此,最合适的最短答案变成了:
FileClose(FileCreate('filename.txt');

0
另一种更简单的创建文件的方法(对于像我这样几年后才找到这个页面的人来说)是简单地使用AssignFile('FileName.TXT')。它会创建一个新的文件,您可以上传文本到其中。
示例(我的10年级高中Delphi实践):
begin
  AssignFile(TFReceipt,'Receipt.TXT');
  redtEReceiptBod.Lines.SaveToFile('Receipt.TXT');
  Showmessage('Receipt generated');
end;

它将任何字符串的内容放入文件中。 为了使文件可读(删除分页符号如/par),您可以将Rich Edit(或任何其他字符串容器)的属性更改为 RichEdit.plaintext:=true; 这将删除所有不必要的分页内容。

警告 请记住,这是我高中项目的一部分,因此它并不是非常复杂,并且可能在所有情况下都无法正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接