2011-03-29 63 views
0
public static List<Product> Load(string filename) 
{ 
    if (!File.Exists(filename)) 
    { 
     throw new FileNotFoundException("Data could not be found ", filename); 
    } 
} 

的Visual Studio 2010提供了以下異常, 「FileNotFoundException異常」未找到文件,但該文件在那裏!

emmm ..確定。這個問題似乎已經解決了。

但是,我仍然無法找到該文件!但該文件在那裏,在同一個目錄中,我已經驗證並且雙重驗證名稱是正確的!我不知道發生了什麼事。

該文件被稱爲「Products.xml」。

+3

該文件可能未找到?這是你自己的例外 – BrokenGlass 2011-03-29 15:48:01

+0

我沒有看到任何錯誤的代碼。當你找不到'filename'所在位置指定的文件時,你期望發生什麼? – 48klocs 2011-03-29 15:48:19

+1

愚蠢的Visual Studio。總是拋出異常! ;) – Mayank 2011-03-29 15:50:46

回答

1

該文件稱爲 「Products.xml」。

您將自己暴露於隨機失敗,並使用類似的文件名。您應該使用文件的完整路徑名稱,如c:\ mumble \ foo \ products.xml。如果你不這樣做,那麼你完全依賴於正確設置你的程序的工作目錄。 Environment.CurrentDirectory的值。

即使通過啓動你的程序(如桌面上的快捷方式)正確設置它,當你沒有寫入的代碼改變了工作目錄時,你仍然可能陷入困境。一個很好的例子是OpenFileDialog,其RestoreDirectory屬性保留爲默認值false。

在您的代碼中始終使用完整路徑名稱。或讓用戶選擇文件。

+0

謝謝,你是絕對正確的。 emm ..現在我剛剛用XML序列化器創建了一個流,讓生活變得更加簡單:) – RKM 2011-03-29 18:52:22

2

你是拋出異常的人。你的意思是提出一個錯誤信息?

+0

yap,我希望它輸出一個錯誤信息,如果沒有找到該文件。這就是說,該文件實際上存在於... – RKM 2011-03-29 15:52:35

0

位於filename不存在的文件,因此它投用以下行除外:throw new FileNotFoundException("Data could not be found ", filename);

您的意思是隻輸出錯誤?

+0

yap,我想輸出一個錯誤,如果該文件沒有找到,這是不是做到這一點? – RKM 2011-03-29 15:51:00

+0

@Rosie:爲了給用戶顯示一個錯誤,你通常只給他們看一個'MessageBox'。你只會在致命條件下拋出異常。 – Kevin 2011-03-30 11:56:02

1

它看起來像問題是File.Exists返回false,你拋出一個異常,這是不是由你的代碼處理。你是否打算處理這個異常,或者這對您的程序來說是一個致命的錯誤?

0

在您的代碼中,首先檢查空文件名,因爲傳遞的參數可能爲空字符串,另外在代碼上應用try catch塊,因爲傳遞的文件名可能不滿足文件的路徑規則。通過你的例外來捕捉塊。

0

您:

A)不希望通過此行拋出異常

拋出新FileNotFoundException異常()

,而是要顯示一個對話框,將用戶,或者在那裏使用其他一些錯誤處理技術。輸出錯誤或者使用下列之一:

Console.WriteLine("File not found") 
MessageBox.Show("File not found"); 

B)較高的在你的調用堆棧有一個try/catch和處理您的錯誤,對話或適合你的應用的另一個錯誤處理方法同樣用。

try 
{ 
    Load(filename); 
} 
catch(FileNotFoundException fe) 
{}