我有一些编写大型二进制文件的程序。我遇到了这个问题:有时我的程序在文件写入时崩溃而没有抛出任何错误(块catch不执行。我编写了一些测试控制台应用程序来查找并解决这个问题。这样的事情:
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块不会捕获此错误。
答案 0 :(得分:0)
尝试添加Flush:
for (int i = 0; i < 4000000; i++)
{
output.Write(i);
//if(i%1000==0) Thread.Sleep(1);
}
output.Flush();