【问题标题】:can't catch "System.IO.DirectoryNotFoundException" in C#无法在 C# 中捕获“System.IO.DirectoryNotFoundException”
【发布时间】:2020-09-06 08:53:57
【问题描述】:

我编写了一些代码来读取文件并遇到了 try-catch 块的问题。

在 mscorlib.dll 中发生了“System.IO.DirectoryNotFoundException”类型的第一次机会异常

附加信息:找不到路径“D:...\WpfApplicationExample\bin\Debug\KeyWord\ROS\KeyWord_Booting_Time.json”的一部分。

虽然我已经处理过了,但我总是遇到这个异常。 我的目录肯定不存在,但我已经通过catch 块处理它,所以为什么我的应用程序仍然在此崩溃:StreamReader sr = new StreamReader(filePath)

请看看下面的代码,告诉我有什么问题?

        try
        {
            StreamReader sr = new StreamReader(filePath);
            jsonString = sr.ReadToEnd();
            sr.Close();
        }
        catch (System.IO.DirectoryNotFoundException e)
        {
            Log.log(TAG, "getKeyWords", e.Message);
        }
        catch (System.IO.IOException e)
        {
            Log.log(TAG, "getKeyWords", e.Message);
        }
        catch (Exception e)
        {
            Log.log(TAG, "getKeyWords", e.Message);
        }

【问题讨论】:

  • 如果您在每个 catch 块中执行相同的操作,那么捕获 2 种特定类型的异常 + 捕获所有异常当然没有意义!
  • 请注意“第一次机会”语言。也许您正在调试并启用了第一次机会异常:stackoverflow.com/questions/564681/…
  • 你确定它会抛出 System.IO.DirectoryNotFoundException 吗?我认为,当 filePath 不存在时,StreamReader 会抛出 System.IO.FileNotFoundException
  • 感谢@Simon Mourier 提供的信息,我现在明白了。
  • @TrịnhVũLong - 如果您找到了解决方案,请回答自己以结束问题并获得积分

标签: c# exception ioexception


【解决方案1】:

对于任何有同样问题的人:请参阅下面的文档以了解第一次机会和第二次机会例外情况。

[https://docs.microsoft.com/en-us/archive/blogs/davidklinems/what-is-a-first-chance-exceptione]

我的应用程序并没有真正崩溃.. 它只是在发生异常时向我显示一条消息以报告我.. 如果我在消息框中单击“继续”.. 它会继续运行我的应用程序并按预期着陆以捕获块.

仅供参考 谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-30
    • 2011-01-28
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多