0

大きなバイナリファイルを書き込むプログラムがあります。そして、私は問題に遭遇しました:エラーをスローせずにファイル書き込み時に私のプログラムがクラッシュすることがあります(ブロックキャッチは実行されません.私はこの問題を見つけて修正するためにいくつかのテストコンソールアプリケーションを書きます.このようなもの:

static void Main(string[] args)
{
    for (int j = 0; j < 100; j++)
    {
        string fileName = @"D:\Users\nimci\Desktop\buf\"+j+".bin";
        using (var output =
            new BinaryWriter(File.Open(fileName, FileMode.Create, FileAccess.Write)))
        {
            for (int i = 0; i < 4000000; i++)
            {
                output.Write(i);
                //if(i%1000==0)   Thread.Sleep(1);
            }
        }
    }
}

そして、私はそのような結果を持っています: 一部のファイルのサイズは 0 です。たとえば、番号が 8、10、15、17、... のファイル

私の自宅の(あまり強力ではない)コンピューターでは、すべてのファイルが正しく書き込まれていますが、私の職場のコンピューターでは、一部のファイルのサイズが 0 になっています。Thread.Sleep(1); のコメントを外すと、(または他の方法でプログラムを遅くします)すべてのファイルは私の仕事用コンピューターでも正しいですが、そのような「修正」は私のサーバーコンピューターでは機能しません。誰がエラーが発生したのか、どうすれば修正できるのか説明できますか? 使用する代わりに try-cath-finally を使用しようとしましたが、catch ブロックはこのエラーをキャッチしません。

4

1 に答える 1

0

フラッシュを追加してみてください:

        for (int i = 0; i < 4000000; i++)         
        {         
            output.Write(i);         
            //if(i%1000==0)   Thread.Sleep(1);         
        }  
        output.Flush(); 
于 2012-07-18T13:01:43.993 に答える