为什么无法捕获来自 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("nonsense string")
只是返回false
.
据我所知,当字符串包含无效路径字符或null
时,它甚至返回.
在MSDN页面上没有提到异常,因此我认为这是非常"安全"的调用方法。
该页面确实有这样说:
如果在尝试确定指定的文件是否存在时发生任何错误,则 Exists 方法返回 false。在引发异常的情况下可能会发生这种情况,例如传递包含无效字符或字符过多的文件名、磁盘故障或丢失,或者调用方没有读取文件的权限。
仅仅因为Directory.Exists
在路径无效时不会引发异常,它只会根据目录的存在返回true
或false
。
查看有关 MSDN 的文档
Directory.Exists(string path)
根本不会引发异常。这似乎是一个经典的RTFM案例;)
如此处所述,该方法仅在未指定绝对或相对路径的任何参数上返回 false。