为什么我不能在这里发现争论的重复:
string path = "\"";
bool dirOk = true;
try
{
dirOk = Directory.Exists(path);
}
catch (ArgumentException)
{
dirOk = false;//Never gets in here
}
编辑:对不起,样品路径不好,现在改了!
配置VS调试器以暂停所有异常.VS将断言:“ArgumentException发生”“路径中的非法字符。”,但try catch什么都不做。
编辑2:我想我明白了,抱歉。 VS中断,但异常已经在Exists()中捕获。
答案 0 :(得分:7)
发布的代码不会引发任何异常......
Directory.Exists("nonsense string")
只返回false
。
据我所知,当字符串包含无效的路径字符或null
时,它甚至会返回。
在MSDN page上没有提到异常,所以我认为这是一种非常'安全'的方法。
该页面确实有这样的说法:
如果在尝试确定指定文件是否存在时发生任何错误,则Exists方法返回false。在引发异常的情况下会发生这种情况,例如传递带有无效字符或字符太多的文件名,磁盘失败或丢失,或者调用者没有读取文件的权限。
答案 1 :(得分:2)
只是因为Directory.Exists
在路径无效时不会抛出异常,所以它只返回true
或false
,具体取决于目录的存在。
查看MSDN
上的文档答案 2 :(得分:1)
Directory.Exists(string path)
根本不会抛出异常。这似乎是一个典型的RTFM案例;)
如上所述here,该方法只对未指定绝对路径或相对路径的任何参数返回false。