如果条件失败,如果块内部抛出异常

时间:2011-11-29 09:49:00

标签: c#

在我的应用程序中,我正在读取配置文件,如果该文件不可用,则抛出异常。

if (!File.Exists(configurationFile))
{
    throw new ArgumentException("Configuration file is missing.");
}

这里发生的事情是,即使文件存在,flow也会转到throw语句。我还注意到,如果从if块中删除throw语句,则此流程正常工作,即如果文件存在,则控制不会进入if块。

以前有人遇到过这个问题吗?任何指针都会有所帮助。

3 个答案:

答案 0 :(得分:6)

File.Exists会因多种原因返回false,而不仅仅是因为文件不存在(这可以解释为什么即使文件存在也仍然失败)。

来自MSDN:

  

如果调用者具有所需权限且路径包含,则返回true   现有文件的名称;否则,错误。此方法也会返回   如果path为null,无效路径或零长度字符串,则返回false。如果   调用者没有足够的权限来读取指定的   文件,没有抛出异常,方法返回false,无论如何   路径的存在。

答案 1 :(得分:3)

  

如果从if块中删除throw语句,则此流程正常工作,即如果文件存在,则控制不会进入if块。

这必须是调试器/调试故障。

答案 2 :(得分:2)

来自documentation

的引用
  

如果调用者没有足够的权限来读取指定的   文件,没有抛出异常,方法返回false,无论如何   路径的存在。

因此,您必须确保在具有足够权限的帐户下运行您的应用程序。