为什么System.IO.File.Exists(字符串路径)返回false?

System.IO.File.Exists(string path) 

即使文件存在于指定路径上,也始终返回false。 可能的解决方案是什么?

这可能是一个许可问题。 从文档 :

如果在尝试确定指定文件是否存在时发生任何错误,则Exists方法返回false。 这可能会在引发exception的情况下发生,例如传递带有无效字符或字符太多的文件名,磁盘失败或丢失,或者调用者没有读取文件的权限。

查看正在发生的事情的一种方法是尝试读取文件(例如,使用File.OpenRead )。 如果成功,我会感到惊讶 – 但是如果它失败了,那么例外应该会给你更多的信息。

在Windows中隐藏文件结尾有时会引起混淆:你知道你的文件名为file.txt,当它实际命名为file.txt.txt时,因为操作系统已经隐藏了最后4个字符。

此处任何答案中未提及的一种可能性是Windows 8.1以后的“文件系统重定向”

例如,如果您的程序是32位应用程序并且您在64位Windows上运行,那么尝试访问%windir%\ System32将被重定向到%windir%\ SysWOW64。 如果%windir%\ SysWOW64中不存在您尝试访问的文件,则System.IO.File.Exists(字符串路径)将返回False。

链接到解释此行为的好文章

我是如何使用Server.MapPath(fileName)因为它一直试图在其他地方找到该文件。

 System.IO.File.Exists(Server.MapPath(string path)) 

在我的情况下,文件名中的不同“破折号”会导致问题。

 var f1 = "4-37R.pdf"; var f2 = "4‐37R.pdf"; var r = f1==f2?"same":"diff"; Console.Write(r); //diff 

原来

 var c1 = '-'; var c2 = '‐'; Console.WriteLine((int)c1); //45 Console.WriteLine((int)c2); //8208 

使用相同的’ – ‘修复问题。

当我在本地调试服务时,这让我感到难过,我在我的工作站上映射的服务器位置(U :)上运行File.Exists(“U:\ dir1”)。 我将U:\ dir1替换为“\\ serverPath \ dir1”,然后File.Exists返回true。

我自己也经历过这种情况。 就我而言,我正在删除该文件并重新创建它。 在删除文件的过程中,我忘记在稍后使用File.Exists之前添加WaitForExit()

System.IO.File.Exists(字符串路径)在尝试读取C:\OpenSSL\bin\file.txt为我返回false。 在管理员模式下运行应用程序没有帮助。 (我登录管理员帐户,Windows 10)一旦我将文件移动到C:\Users\MyUser\Desktop\file.txt ,File.Exists()返回true。

我也很困惑,然后意识到当我应该使用Directory.Exists时我正在使用File.Exists。