.NET文件流写入方法写入所有空行

时间:2009-12-14 19:12:40

标签: c# .net filestream

我有一个C#控制台应用程序通过网络访问文件并写入它。我注意到有些文件已损坏并且只写入null。我没有得到任何例外。 我使用简单的代码将字节数组写入文件的流。在二进制模式下打开文件时,我看到的都是零,类似于“0:00 00 00 00” 10:00 00 00 00“。

有谁知道为什么会发生这样的事情?可能存在网络故障,但网络故障应该抛出一些IO异常吗?

如果有人对此有任何想法,请告诉我。

代码示例:

FileInfo fi = new FileInfo(filePath);
using (FileStream fs = fi.Open (FileMode.Create, FileAccess.Write, FileShare.None))
{
   fs.Write(byteData, 0, byteData.Length);
}

4 个答案:

答案 0 :(得分:9)

确保在适当的位置调用FileStream.Flush()。

答案 1 :(得分:3)

确保您关闭了该文件。

答案 2 :(得分:2)

正如 tzerb 上面提到的他的代码,我认为最好添加另一个图层,一个try / catch来检查并查看异常是否确实被捕获 - 我很惊讶没有异常发生但值得一试

try{
  FileInfo fi = new FileInfo(filePath); 
  using (FileStream fs = fi.Open (FileMode.Create, FileAccess.Write, FileShare.None)) 
  { 
    fs.Write(byteData, 0, byteData.Length); 
    fs.Flush();
    fs.Close();
  }
}catch(System.Security.SecurityException secEx){
  Console.WriteLine("SecurityException caught: {0}", secEx.ToString());
}catch(System.IO.IOException ioEx){
  Console.WriteLine("IOException caught: {0}", ioEx.ToString());
} 

确认您是否确实收到消息'IOException caught:...'

编辑:添加了安全例外以查看它是否与权限有关?

希望这有帮助, 最好的祝福, 汤姆。

答案 3 :(得分:0)

这是一个新的。我的猜测是,在下游代码中丢失了一个异常,FileStream对象被销毁了。我首先要改变代码来明确地做所有事情:


FileInfo fi = new FileInfo(filePath); 
using (FileStream fs = fi.Open (FileMode.Create, FileAccess.Write, FileShare.None)) 
{ 
    fs.Write(byteData, 0, byteData.Length); 
    fs.Flush();
    fs.Close();
} 

我要做的下一件事是确保您正在编写的数据符合预期,然后没有其他任何内容正在修改文件。