Pascal写入失败

Pascal写入失败,pascal,freepascal,lazarus,Pascal,Freepascal,Lazarus,我正在用帕斯卡语言为学校做一个小项目。 我使用的是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);//Add

我正在用帕斯卡语言为学校做一个小项目。 我使用的是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指令的长度和调用次数

如何修复它

我试图使用名为WriteFile的“Windows”模块中的WinApi函数,但未能将最后3个参数传递给它


大更新


谢谢。在那个例子中,这是有效的(关闭文件)。但我有一个稍微复杂一点的程序,我将打开的文件句柄传递给通过“var”写入的函数。甚至在关闭文件后,什么也不做。这很奇怪。

您应该
在程序结束时关闭(oFile)
以确保输出被刷新。

您应该
在程序结束时关闭(oFile)
以确保输出被刷新。

也可以通过添加(在本例中)来更新文件而不关闭它

Flush(oFile);
写了一封信之后


这在您可能有一个长文件并且希望确保定期更新的情况下非常有用。当然,完成后仍应关闭文件。

也可以通过添加(在本例中)来更新文件而不关闭文件

Flush(oFile);
写了一封信之后


这在您可能有一个长文件并且希望确保定期更新的情况下非常有用。当然,完成后您仍然应该关闭文件。

我忘了。但它并没有改变任何事情。只是在这里测试(FPC2.6.0):它确实解决了您的问题。您确定重新编译的程序正确吗?谢谢。在那个例子中是这样的。但我有一个稍微复杂一点的程序,我通过“var”将打开的文件句柄传递给函数。甚至在最后一刻关闭那个文件,什么也不做。真奇怪,我忘了。但它并没有改变任何事情。只是在这里测试(FPC2.6.0):它确实解决了您的问题。您确定重新编译的程序正确吗?谢谢。在那个例子中是这样的。但我有一个稍微复杂一点的程序,我通过“var”将打开的文件句柄传递给函数。甚至在最后一刻关闭那个文件,什么也不做。奇怪的是,这是1997年稳定的功能。如果这个复杂的场景仍然失败,那么肯定还有另一个bug。继续简化,直到问题解决为止。“那么你就很有可能最后一次更改与被窃听的地方有关。”MarcovandeVoort说,我一直没能修复它。但这是我一生中看到的最后一个Pascal项目。我甚至尝试使用Winapi函数写入文件,但Pascal不可能将NULL、NIL或0作为参数传递。正因为如此,不可能使用winapi函数WriteFile。这是1997年稳定的功能。如果这个复杂的场景仍然失败,那么肯定还有另一个bug。继续简化,直到问题解决为止。“那么你就很有可能最后一次更改与被窃听的地方有关。”MarcovandeVoort说,我一直没能修复它。但这是我一生中看到的最后一个Pascal项目。我甚至尝试使用Winapi函数写入文件,但Pascal不可能将NULL、NIL或0作为参数传递。因此,不可能使用winapi函数WriteFile。