Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当目录不';时,DirectoryExists(";c:temp\\foo";)返回true;不存在!_C#_.net_File Io - Fatal编程技术网

C# 当目录不';时,DirectoryExists(";c:temp\\foo";)返回true;不存在!

C# 当目录不';时,DirectoryExists(";c:temp\\foo";)返回true;不存在!,c#,.net,file-io,C#,.net,File Io,好吧,我被一些看起来有点奇怪的东西咬了。我意识到没有正确格式化路径名是我的错误,但是我希望下面的测试返回false,特别是因为文件夹不存在 DirectoryExists("C:temp\\foo") 但事实上,即使目录不存在,它也会返回true 代码应该是 DirectoryExists("C:\\temp\\foo") 有人能解释一下为什么我从第一个版本中得到了假阳性吗?我希望它返回false或抛出异常,但不返回true。此API运行正常,但在您第一次遇到此行为时经常出现错误。在卷字母后

好吧,我被一些看起来有点奇怪的东西咬了。我意识到没有正确格式化路径名是我的错误,但是我希望下面的测试返回false,特别是因为文件夹不存在

DirectoryExists("C:temp\\foo")
但事实上,即使目录不存在,它也会返回true

代码应该是

DirectoryExists("C:\\temp\\foo")

有人能解释一下为什么我从第一个版本中得到了假阳性吗?我希望它返回false或抛出异常,但不返回true。

此API运行正常,但在您第一次遇到此行为时经常出现错误。在卷字母后省略
\
具有特殊的语义。它将用传递到该卷的最后一次调用
SetCurrentDirectory
中的值替换卷说明符。这里讨论了如何记住这一点

在这种情况下,最后传入的值不是
c:\
,就是当前目录根本没有设置。因此,这个调用实际上成为了第二个版本

Directory.Exists("c:\\temp\\foo")
这被正确地计算为true


对于
Directory.Exists
发生这种情况的原因在于,它所使用的函数依赖于这种行为(请参阅链接文档)

我想我应该指定这是.NET下的C#!什么是目录存在?这不是标准的.NET库函数。它可以是
Directory.Exists(path)
,但没有
DirectoryExists
函数。我也看不出它返回true的任何原因。我很好奇。顺便说一句,万一你不知道,你也可以写
Directory.Exists(@“C:\temp\foo”)清除转义序列时。@Adam Robinson-在
IsolatedStorageFile
类上有一个方法。尽管如此,对于此路径,即使这样也不应返回
true
。可能是第三方方法没有经过适当测试。对不起,我很匆忙地打了这个。我的意思是写'Directory.Exists'作为System.IO的一部分。但是这个目录不存在!(据我所知),即使它是“修复的”“对于我来说,卷和路径名仍然应该返回false,对吗?出现这种情况的原因是代码错误地认为目录存在,而实际上它不存在。你能链接到解释这些语义的地方吗?我不确定我是否得到了它。如果我对它进行沙箱处理,它的行为将符合我的预期。然而,在我的产品代码中,我很可能得到一个误报,因为当前目录导致了一个条件,即存在问题的目录。