File.WriteAllLines无声失败

时间:2013-10-14 14:19:22

标签: c# file file-io

我偶然发现了File.WriteAllLines的一个不寻常的问题。

我的代码看起来像这样

File.WriteAllLines(filename, data);
bool exists = File.Exists(filename);

问题是有时文件写入失败,但不会引发异常,并且代码认为文件存在时不存在。

  • 该文件位于网络位置。
  • 文件名为Database.locklock扩展名对操作系统有意义吗?
  • Exists返回true,但文件根本就不存在。没有例外。
  • 从单独的进程中调用Exists将返回false。
  • 调用Process.Start(filename)会导致错误(不是代码异常,只是操作系统说无法找到文件)。
  • 本地计算机正在运行Windows 7。
  • 远程计算机正在运行Windows XP。

我如何调试这里发生的事情?

更新

根据David的建议,我使用procmon.exe观察了这个过程。

结果如下:http://i.imgur.com/IBz6Ujt.png

你会注意到有很多事情在重复进行,我并不完全理解,最后报告文件已成功写入。

解决

感谢Patrick的建议,我发现由于我没有考虑到代码路径,该文件立即被删除在不同的代码段中。很抱歉浪费每个人的时间。我感到宽慰,虽然这只是我没有思想,而不是不可预见的网络问题。

1 个答案:

答案 0 :(得分:1)

这可能是权限问题。如果您没有该文件的读取权限,File.Exists将返回false。可能是您运行代码从Visual Studio创建文件,并且在运行LINQPad时具有管理员权限,而其他权限对该位置没有读取权限。