我偶然发现了一个关于 File.WriteAllLines
的异常问题。
我有这样的代码
File.WriteAllLines(filename, data);
bool exists = File.Exists(filename);
问题是有时文件写入失败,但不会引发异常,代码认为文件不存在。
- 文件位于网络位置。
- 文件名为
Database.lock
。lock
扩展对操作系统有什么意义吗? Exists
返回 true,但文件根本不存在。没有异常(exception)。- 从单独的进程调用
Exists
返回 false。 - 调用
Process.Start(filename)
导致错误(不是代码异常,只是操作系统说找不到文件)。 - 本地机器运行的是 Windows 7。
- 远程机器运行的是 Windows XP。
我如何调试这里发生的事情?
更新
听从 David 的建议,我使用 procmon.exe 观察了这个过程。
这是结果:http://i.imgur.com/IBz6Ujt.png
你会发现有很多重复的事情,我没有完全理解,最后,报告文件已经写入成功。
已解决
感谢 Patrick 的建议,我发现由于我没有考虑的代码路径,该文件在不同的代码段中被立即删除。很抱歉浪费了大家的时间。我感到欣慰的是,这只是我的粗心大意,而不是不可预见的网络问题。
最佳答案
这可能是权限问题。如果您没有文件的读取权限,File.Exists 将返回 false。可能是您正在运行代码以从 Visual Studio 创建文件,并且当您运行 LINQPad 时它具有管理员权限,而其他权限对该位置没有读取权限。
关于c# - File.WriteAllLines 静默失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19362384/