0

私は学校のためにパスカルで小さなプロジェクトに取り組んでいます。Lazaruz1.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

ご覧のとおり、文の途中で止まり、すべてを書いているわけではありません。すべては、1つのWriteLn命令の長さと、それが呼び出される回数によって異なります。

それを修正する方法は?

WriteFileという「Windows」モジュールのWinApi関数を使おうとしましたが、最後の3つの引数を渡すことができませんでした。


大きな更新

ありがとう。その例では、それは機能します(ファイルを閉じる)。しかし、開いたファイルハンドルを、「var」を介して書き込んでいる関数に渡す、もう少し複雑なプログラムがあります。そして、でそのファイルを閉じた後でも、何もしません。それはおかしい。

4

2 に答える 2

5

Close(oFile)プログラムの最後で、出力が確実にフラッシュされるようにする必要があります。

于 2013-01-17T10:22:57.157 に答える
1

追加することで、ファイルを閉じずに更新することもできます (この例では)

Flush(oFile); 書き込み後

これは、長いファイルがあり、定期的に更新されていることを確認したい場合に便利です。もちろん、終了したらファイルを閉じる必要があります。

于 2013-03-26T13:47:33.037 に答える