我正在Pascal的小型项目上学。 我正在使用Lazaruz 1.0.2
写入文件时,我遇到了wirteLn函数的问题。 一段时间后,它就停止写入文件。
以此程序为例:
var oFile: Text;
i: LongWord;
begin
Assign(oFile, 'test.txt');
ReWrite(oFile);
for i:=1 to 4096 do
WriteLn(oFile, 'ThisIsTest');
CloseFile(oFile);//Added as suggested
end.
这是输出:
...
4072 ThisIsTest
4073 ThisIsTest
4074 ThisIsTest
4075 ThisIsTe
正如你所看到的那样,它只是停留在句子的中间而且并不是全部写的。 所有这些都取决于一个WriteLn insturction有多长,以及它被调用多少次。
如何解决?
我尝试使用名为WriteFile的“Windows”模块中的WinApi函数,但我未能将最后3个参数传递给它。
BIG UPDATE
感谢。这个例子中有效(关闭文件)。但是我有一些更复杂的程序,我将打开的文件句柄传递给通过“var”写入它的函数。即使在关闭该文件后也没有做任何事情。这很奇怪。
答案 0 :(得分:5)
您应该在程序结束时Close(oFile)
确保输出已刷新。
答案 1 :(得分:1)
也可以通过添加(在此示例中)
来更新文件而不关闭它 Flush(oFile);
在Writeln之后
如果您有一个长文件并希望确保定期更新,这将非常有用。当然,完成后你仍然应该关闭文件。