为什么捕捉不到异常?

yjl830 2003-08-29 03:05:40
using System;
using System.IO;
class DirectoryTest
{
public static void Main()
{
DirectoryInfo d=new DirectoryInfo("f:\\c#");
DirectoryInfo d1;
DirectoryInfo d2;
try
{
d1=d.CreateSubdirectory("file1");
}
catch(IOException e)
{
Console.WriteLine("Directory file1 failed because:{0}",e);
return;
}
try
{
d2=d.CreateSubdirectory("file1");
}
catch(IOException e)
{
Console.WriteLine("Directory File2 failed because:{0}",e);
return;
}
}
}
明明有了file1了,为什么没有发生什么异常IOException
...全文
104 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cppTrier 2003-08-30
  • 打赏
  • 举报
回复
我看了一下CreatSubdiretory()的实现,发现这个函数本身确实只会抛出ArgumentNullException 和 ArgumentException这两个异常。但在它调用的一个Diretory的私有方法中,有一个会抛出IOException异常,但是条件好像是不能成功创建子目录,而不是已存在同名的目录。 所以我觉得可能是msdn的文档有错误。或者在这种情况下有可能而不是一定会抛出这个异常。由于代码比较多,而且涉及到私有方法是没有文档的,所以读得不是太仔细,但我的大体判断就是上面的那些。
yjl830 2003-08-30
  • 打赏
  • 举报
回复
那为什么IOException没有触发呢/
cppTrier 2003-08-29
  • 打赏
  • 举报
回复
-_-b 复制错了

异常类型 条件
ArgumentException path 未指定有效文件路径或包含无效的 DirectoryInfo
字符。
ArgumentNullException path 为空引用(Visual Basic 中为 Nothing)。
DirectoryNotFoundException 路径的一部分未找到。
IOException 已有文件或目录具有 path 所指定的名称。
PathTooLongException 指定的路径或文件名太长,或者二者都太长。在完全限定
后,二者都必须少于 256 个字符。
SecurityException 调用方没有所需的权限。
cppTrier 2003-08-29
  • 打赏
  • 举报
回复
这是msdn里对CreatSubdirectory可能产生的异常的描述,但运行程序时确实没有抛出异常,有点奇怪。

异常类型 条件
ArgumentException path 是一个零长度字符串、仅包含空白或者包含一个或多个由 InvalidPathChars 定义的无效字符。 -或-系统未能检索绝对路径。
SecurityException 调用方没有所需的权限。
ArgumentNullException path 为空引用(Visual Basic 中为 Nothing)。
PathTooLongException path 的长度或 path 的绝对路径信息超过了系统定义的最大长度。

yjl830 2003-08-29
  • 打赏
  • 举报
回复
还有,用哪种方法在建目录时,能产生IOException这个异常
也就是说能测试出这个目录是否存在,存在刚建,不存在刚退出/
请举例/
BeyondLove2000 2003-08-29
  • 打赏
  • 举报
回复
可是CreatSubdirectory有IOException这个成员啊


但是没有触发!
重复CreateSubdirectory("file1");应该不会触发异常。
qqq123 2003-08-29
  • 打赏
  • 举报
回复
据我的经验CreateSubdirectory产生的是:
ArgumentNullException 和 ArgumentException 异常。
yjl830 2003-08-29
  • 打赏
  • 举报
回复
还有,用哪种方法在建目录时,能产生IOException这个异常

请举例/
yjl830 2003-08-29
  • 打赏
  • 举报
回复
CreateSubdirectory("file1"); 创建子目录 存在(不创建) 不存在(创建)
不会产生异常
——————————————————————————————
可是CreatSubdirectory有IOException这个成员啊/
Aaron_Lau 2003-08-29
  • 打赏
  • 举报
回复
一是你没有throw.
二是,
catch(IOException e)
{
Console.WriteLine("Directory File2 failed because:{0}",e);
return;
}
这段代码永远都不会执行。应该把它放在
try
{
d2=d.CreateSubdirectory("file1");
}
前面。
ms44 2003-08-29
  • 打赏
  • 举报
回复
没有exception throw out.
大户翁 2003-08-29
  • 打赏
  • 举报
回复
CreateSubdirectory("file1"); 创建子目录 存在(不创建) 不存在(创建)
不会产生异常
brightheroes 2003-08-29
  • 打赏
  • 举报
回复
两种可能
1,没有发生异常
2,异常类型不是IOException

try

catch(IOException e) -> catch(Exception e)

看看到底抛出什么

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧