2011-11-29 59 views
1

在我的应用程序中,我正在读取配置文件,如果文件不可用,则抛出异常。如果条件失败,如果从内部抛出异常,如果块

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

这里发生了什么,即使文件存在,流程也会抛出语句。我还注意到,如果我从if块中删除throw语句,那么这个流程正常工作,即如果文件存在,控制不会进入if块。

有没有人遇到过这个问题?任何指针都会有帮助。

+5

使用调试器,卢克! –

+1

我想你在“configurationFile”中传递错误的文件路径。 – pramodtech

+0

听起来像当前应用程序范围的路径不是你认为的那样... –

回答

6

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

从MSDN:如果调用方具有所需的权限和路径包含现有文件的 名

返回true;否则,是错误的。如果路径为空,无效路径或零长度字符串,则此方法还返回 。如果 调用者没有足够的权限来读取指定的 文件,则不会抛出异常并且该方法返回false,无论 是否存在路径。从documentation

+0

File.Exists的MSDN链接中的注释部分对此进行了解释。 – Rajesh

2

报价:

如果主叫方没有足够的权限读取指定 文件,没有抛出异常,不论何种方法返回false路径的存在 。

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

+0

[Sysinternal's Process Monitor](http://live.sysinternals.com/procmon.exe)对我以前的类似场景很有帮助。 –

3

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

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

+1

我以为我是唯一一个“误解”问题的人:) – Goran