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 回答