gpt4 book ai didi

Delphi 文件访问 - 如果不关闭文件,为什么会得到不完整的输出?

转载 作者:行者123 更新时间:2023-12-03 15:19:09 25 4
gpt4 key购买 nike

下面是一个简单的控制台应用程序,然后生成十组 3 个随机数,并将它们打印到控制台窗口和文本文件“Output.txt”。

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils;
var
outputFile: TextFile;
i: Integer;
a,b,c: Single;
begin
try
Randomize;
AssignFile(outputFile, 'Output.txt');
ReWrite(outputFile);
for i := 0 to 9 do
begin
a := Random;
b := Random;
c := Random;
WriteLn(FloatToStr(a) + Char(9) + FloatToStr(b) + Char(9) + FloatToStr(c));
WriteLn(outputFile, FloatToStr(a) + Char(9) + FloatToStr(b) + Char(9) + FloatToStr(c));
end;
Close(outputFile);
Sleep(10000);
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.

仅当我包含第 26 行时,文本文件才包含与控制台窗口相同的信息:

Close(outputFile);

如果我从代码中省略这一点,我希望无论如何都能将相同的数据打印到文本文件中,但文本文件中实际打印的内容对于前 9 行是相同的,然后是不完整的最后一行。

为什么会发生这种情况?由于省略了 Close 过程,最后一行仅被部分写入,通过什么过程?

最佳答案

这是因为文件输出被缓冲所致。当您关闭文件时,它会导致缓冲区被刷新并将剩余内容写入磁盘。

另一种方法是执行 Flush(outputFile) WriteLn之后对于文件,它将完成相同的事情,但以牺牲性能为代价。

关于Delphi 文件访问 - 如果不关闭文件,为什么会得到不完整的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14583955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com