我有一个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);
}
答案 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();
}
我要做的下一件事是确保您正在编写的数据符合预期,然后没有其他任何内容正在修改文件。