5

我偶然发现了一个有点不寻常的问题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 的建议,我发现由于我没有考虑到代码路径,文件在不同的代码段中被立即删除。很抱歉浪费了大家的时间。我松了一口气,虽然只是我的粗心大意,而不是不可预见的网络问题。

4

1 回答 1

1

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

于 2013-10-14T15:06:40.613 回答