2011-11-29 57 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