2

我有一个 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

4 回答 4

9

确保在适当的地方调用 FileStream.Flush()。

于 2009-12-14T19:22:34.620 回答
3

确保您正在关闭文件。

于 2009-12-14T19:15:57.770 回答
2

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

尝试{
  FileInfo fi = new FileInfo(filePath);
  使用 (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 捕获:{0}", secEx.ToString());
}catch(System.IO.IOException ioEx){
  Console.WriteLine("IOException 捕获:{0}", ioEx.ToString());
}

然后确认您是否确实收到消息“IOException 捕获:...”

编辑:添加了一个安全异常以查看它是否与权限有关?

希望这会有所帮助,最好的问候,汤姆。

于 2009-12-14T21:14:25.380 回答
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();
} 

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

于 2009-12-14T20:58:11.240 回答