【发布时间】:2012-06-26 15:11:00
【问题描述】:
我目前正在开发一个程序,该程序通过使用File.Exists() 来遍历各种目录以确保特定文件存在。
应用程序一直声称某些文件实际上不存在,而我最近发现这个错误是由于路径太长造成的。
我意识到在 SO 上存在一些问题,解决了 File.Exists() 返回不正确的值,但似乎没有一个可以解决这个特定问题。
重命名目录和文件以缩短路径并不是一个真正的选择,所以我现在不确定该怎么做。有没有办法解决这个问题?
使用的代码没什么特别的(我已经删掉了一些不相关的代码),但我会将它包含在下面以防万一。
private void checkFile(string path)
{
if (!File.Exists(path))
Console.WriteLine(" * File: " + path + " does not exist.");
}
【问题讨论】:
-
它没有错误地返回
false。它遵守文档:“如果在尝试确定指定文件是否存在时发生任何错误,Exists 方法将返回 false。这可能发生在引发异常的情况下,例如传递包含无效字符或过多字符的文件名、失败或缺少磁盘,或者调用者没有读取文件的权限。” -
文件是否位于特殊文件夹中?
-
你为什么要先检查?文件系统是不稳定的,所以你只是在设置一个竞争条件。在进行 .Exists 检查和使用文件之间删除文件时,您仍然必须准备捕获异常,同时对 .Exists() 的调用会导致额外的(并且非常昂贵的)额外的磁盘行程.最好将您的精力和代码投入到异常处理程序中。
-
好的,我找到了一个使用 DirectoryInfo 和 FileInfo 的解决方案。它不一定高效或漂亮,但它确实有效。