System.IO.File.Exists(string path)
即使文件存在于指定路径上,也总是返回 false。可能的解决方案是什么?
很可能是权限问题。从文档中:
如果在尝试确定指定文件是否存在时发生任何错误,Exists 方法将返回 false。这可能发生在引发异常的情况下,例如传递包含无效字符或过多字符的文件名、磁盘故障或丢失,或者调用者没有读取文件的权限。
查看正在发生的事情的一种方法是尝试读取文件(例如使用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(string path) 将返回 False。
我也对此感到困惑,然后意识到我在使用 File.Exists 时应该使用 Directory.Exists。
就我而言,文件名中的不同“破折号”会导致问题。
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
使用相同的“-”可以解决问题。
我是如何解决这个问题的,Server.MapPath(fileName)
因为它一直试图在其他地方找到文件。
System.IO.File.Exists(Server.MapPath(string path))
当我在本地调试服务时,这让我难住了一段时间,我正在针对在我的工作站上映射为 (U:) 的服务器位置运行 File.Exists("U:\dir1")。我将 U:\dir1 替换为“\\serverPath\dir1”,然后 File.Exists 返回 true。
我自己也在经历这个。就我而言,我正在删除文件并重新创建它。在删除文件的过程中,我忘记在稍后WaitForExit()
使用之前添加File.Exists
这里还有一个,这让我花了太长时间才知道。
文件名在用于写入文件的构造变量中,然后是用于检查文件是否已成功写入的同一个变量,因此它不可能是不同版本的“-”。我在 Linux 上运行单声道并以不同于程序通常由/as 运行的用户身份进行调试。许多这些类型的错误都与权限有关,我花了一段时间来解决这个问题。当 File.OpenRead 也抛出“找不到文件”时,我终于注意到我的文件名末尾有一个空格字符。我只有在复制异常消息时才看到这一点,该消息在文件名字符串周围显示引号,显示包含的空格。
显然,您可以编写带有尾随空格的文件名,但 File.Exists 将其修剪掉并且无法识别它。当我消除尾随空格时, File.Exists 按预期工作。
我今天刚刚了解到 System.IO.File.Exists 将返回 false 如果文件存在但为空
可能需要使用 DirectoryProvider Refresh() 过程从 Exists 函数中获得正确的结果。
例如代码如下:
private DirectoryInfo CreateDirectory(string folderPath, int code, string message)
{
DirectoryInfo di;
try
{
di = DirectoryProvider.CreateDirectory(folderPath);
}
catch
{
throw new WebServiceException(code, HttpStatusCode.BadRequest, message);
}
di.Refresh();
if (!DirectoryProvider.Exists(di))
{
throw new WebServiceException(code, HttpStatusCode.BadRequest, message);
}
return di;
}
System.IO.File.Exists(string path) 在尝试读取时为我返回了 false C:\OpenSSL\bin\file.txt
。在管理员模式下运行应用程序没有帮助。(我登录的是管理员帐户,Windows 10)一旦我将文件移动到C:\Users\MyUser\Desktop\file.txt
, File.Exists() 返回 true。