为什么无法捕获Directory.Exist中的ArgumentException?

时间:2013-10-10 13:05:45

标签: c# exception-handling

为什么我不能在这里发现争论的重复:

        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()中捕获。

3 个答案:

答案 0 :(得分:7)

发布的代码不会引发任何异常......

Directory.Exists("nonsense string")只返回false

据我所知,当字符串包含无效的路径字符或null时,它甚至会返回。

MSDN page上没有提到异常,所以我认为这是一种非常'安全'的方法。

该页面确实有这样的说法:

  

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

答案 1 :(得分:2)

只是因为Directory.Exists在路径无效时不会抛出异常,所以它只返回truefalse,具体取决于目录的存在。

查看MSDN

上的文档

答案 2 :(得分:1)

Directory.Exists(string path)根本不会抛出异常。这似乎是一个典型的RTFM案例;)

如上所述here,该方法只对未指定绝对路径或相对路径的任何参数返回false。