为什么无法捕获来自 Directory.Exists 的 ArgumentException

本文关键字:Directory Exists ArgumentException 为什么 | 更新日期: 2023-09-27 18:34:49

为什么我在这里无法抓住参数:

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

编辑:对不起,错误的样本路径,现在更改了!

配置 VS 调试器以在所有异常时停止。VS 将中断说:"发生参数异常"路径中的非法字符",但 try catch 什么都不做。


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

为什么无法捕获来自 Directory.Exists 的 ArgumentException

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

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

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

在MSDN页面上没有提到异常,因此我认为这是非常"安全"的调用方法。

该页面确实有这样说:

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

仅仅因为Directory.Exists在路径无效时不会引发异常,它只会根据目录的存在返回truefalse

查看有关 MSDN 的文档

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

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