File.WriteAllLines无声失败

Rot*_*tem 5 c# file-io file

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

我的代码看起来像这样

File.WriteAllLines(filename, data);
bool exists = File.Exists(filename);
Run Code Online (Sandbox Code Playgroud)

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

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

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

更新

按照David的建议,我使用procmon.exe观察了这个过程.

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

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

解决了

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

Pat*_*ckV 1

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