我偶然发现了一个有点不寻常的问题File.WriteAllLines
。
我有看起来像这样的代码
File.WriteAllLines(filename, data);
bool exists = File.Exists(filename);
问题是有时文件写入失败,但不会引发异常,并且代码认为文件存在时它不存在。
- 该文件位于网络位置。
- 文件名为
Database.lock
.lock
扩展对操作系统意味着什么? Exists
返回 true,但文件根本不存在。没有引发异常。Exists
从单独的进程调用返回 false。- 调用
Process.Start(filename)
会导致错误(不是代码异常,只是操作系统说它找不到文件)。 - 本地计算机正在运行 Windows 7。
- 远程计算机正在运行 Windows XP。
我如何调试这里发生的事情?
更新
按照大卫的建议,我使用 procmon.exe 观察了这个过程。
这是结果:http: //i.imgur.com/IBz6Ujt.png
你会注意到有很多事情在重复发生,我不完全理解,最后报告文件已经写入成功。
解决了
感谢 Patrick 的建议,我发现由于我没有考虑到代码路径,文件在不同的代码段中被立即删除。很抱歉浪费了大家的时间。我松了一口气,虽然只是我的粗心大意,而不是不可预见的网络问题。