0

为什么我在这里无法捕捉到 Argument excpetion:

        string path = "\"";
        bool dirOk = true;
        try
        {
            dirOk = Directory.Exists(path);
        }
        catch (ArgumentException)
        {
            dirOk = false;//Never gets in here
        }

编辑:对不起,错误的示例路径,现在更改!

将 VS 调试器配置为在所有异常上停止。VS 会中断说:“ArgumentException Occurred”“路径中的非法字符。”,但 try catch 什么也不做。


编辑2:我想我明白了,对不起。VS 中断但异常已经在 Exists() 中捕获。

4

3 回答 3

7

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

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

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

MSDN 页面上没有提到异常,所以我认为这是非常“安全”的调用方法。

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

如果在尝试确定指定文件是否存在时发生任何错误,Exists 方法将返回 false。这可能发生在引发异常的情况下,例如传递包含无效字符或过多字符的文件名、磁盘故障或丢失,或者调用者没有读取文件的权限。

于 2013-10-10T13:09:04.880 回答
2

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

查看MSDN上的文档

于 2013-10-10T13:12:53.987 回答
1

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

如此处所述该方法仅对未指定绝对或相对路径的任何参数返回 false。

于 2013-10-10T13:13:08.570 回答