我偶然发现了File.WriteAllLines
的一个不寻常的问题。
我的代码看起来像这样
File.WriteAllLines(filename, data);
bool exists = File.Exists(filename);
问题是有时文件写入失败,但不会引发异常,并且代码认为文件存在时不存在。
Database.lock
。 lock
扩展名对操作系统有意义吗?Exists
返回true,但文件根本就不存在。没有例外。 Exists
将返回false。Process.Start(filename)
会导致错误(不是代码异常,只是操作系统说无法找到文件)。我如何调试这里发生的事情?
根据David的建议,我使用procmon.exe观察了这个过程。
结果如下:http://i.imgur.com/IBz6Ujt.png
你会注意到有很多事情在重复进行,我并不完全理解,最后报告文件已成功写入。
感谢Patrick的建议,我发现由于我没有考虑到代码路径,该文件立即被删除在不同的代码段中。很抱歉浪费每个人的时间。我感到宽慰,虽然这只是我没有思想,而不是不可预见的网络问题。
答案 0 :(得分:1)
这可能是权限问题。如果您没有该文件的读取权限,File.Exists将返回false。可能是您运行代码从Visual Studio创建文件,并且在运行LINQPad时具有管理员权限,而其他权限对该位置没有读取权限。