System.IO.File.Exists(string path)
Run Code Online (Sandbox Code Playgroud)
即使文件存在于指定路径上,也始终返回false.可能的解决方案是什么?
Jon*_*eet 45
这可能是一个许可问题.从文档:
如果在尝试确定指定文件是否存在时发生任何错误,则Exists方法返回false.在引发异常的情况下会发生这种情况,例如传递带有无效字符或字符太多的文件名,磁盘失败或丢失,或者调用者没有读取文件的权限.
查看正在发生的事情的一种方法是尝试读取文件(例如File.OpenRead).如果成功,我会感到惊讶- 但是如果它失败了,那么例外应该会给你更多的信息.
小智 8
在Windows中隐藏文件结尾有时会引起混淆:你知道你的文件名为file.txt,当它实际命名为file.txt.txt时,因为操作系统已经隐藏了最后4个字符.
此处任何答案中未提及的一种可能性是Windows 8.1以后的"文件系统重定向".
例如,如果您的程序是32位应用程序并且您在64位Windows上运行,那么尝试访问%windir%\ System32将被重定向到%windir%\ SysWOW64.如果%windir%\ SysWOW64中不存在您尝试访问的文件,则System.IO.File.Exists(字符串路径)将返回False.
就我而言,文件名中的不同“破折号”会导致问题。
var f1 = "4-37R.pdf";
var f2 = "4?37R.pdf";
var r = f1==f2?"same":"diff";
Console.Write(r); //diff
Run Code Online (Sandbox Code Playgroud)
结果
var c1 = '-';
var c2 = '?';
Console.WriteLine((int)c1); //45
Console.WriteLine((int)c2); //8208
Run Code Online (Sandbox Code Playgroud)
使用相同的“-”解决问题。
我如何解决这个问题,是Server.MapPath(fileName)因为它一直试图在其他地方查找文件。
System.IO.File.Exists(Server.MapPath(string path))
Run Code Online (Sandbox Code Playgroud)