2012-07-26 180 views
2

我是新手關於Try/Catch的。在下面的代碼中,我有一個簡單的測試來檢查文件是否存在。在我的C#課的任務中,我必須使用Try/Catch,並且我不確定如何使用它,如果我仍然在Try部分中使用if語句,或者有更好的方法來檢查文件是否存在裏面試試?如果文件是簡單的txt文件或序列化文件,有什麼區別嗎?檢查文件是否存在Try/Catch

​​

的try/catch語句辦法,我必須使用

try 
{ 
code to check if file exist here 
} 
catch 
{ 
error message here 
} 
+1

File.Exists不會引發任何異常,所以我不覺得有什麼真的有任何需要嘗試抓住那裏。你可以使用一些更好的例子來使用try-catch。 – AksharRoop 2012-07-26 06:59:41

+0

您可能想檢查文件是否丟失,然後顯示消息框。也許嘗試如果(!文件。存在) – Greg 2012-07-26 07:00:31

+0

如果可能的話,遠離try-catch,除非你想要一個異常,並且你知道如何處理它,或者你想捕獲任何異常來記錄它,而不是讓它最終崩潰你的應用程序。 – 2012-07-26 07:07:10

回答

2

你已經檢查的文件在你第一次sniplet存在。沒有任何需要,這個代碼在try/catch塊內。

+0

那麼,如果他們想要在檢查後使用該文件,則仍然存在競爭條件;-) – Joey 2012-07-26 07:01:44

+0

好的,但是在打開和保存文件時,我必須在我的任務中使用Try/Catch或Using。我想老師希望我們處理情況,如果文件不存在或使用沒有寫入權限 – 2012-07-26 07:13:01

+0

@ 3D-kreativ:在*此*代碼中,你已經檢查存在。 **可能是**你的老師意味着其他:如果你immagine,你正在寫數據到(比如說)USB驅動器上的文件。一個大文件。在寫入過程中,您可以從PC中拔出USB。這意味着在寫操作過程中文件不再可用(它不存在更多),並且您必須處理這些類型的問題。如果你想檢查文件的前綴,使用File.Exists(..),但是如果你打算在文件中寫入某些東西,可以使用try/catch來解釋我之前寫的原因。 – Tigran 2012-07-26 07:36:54

5

如果你想檢查文件是否存在而不使用File.Exist,那麼你可以嘗試在try塊中打開文件,然後捕獲異常FileNotFoundException

try 
    { 
     // Read in non-existent file. 
     using (StreamReader reader = new StreamReader("TextFile1.txt")) 
     { 
     reader.ReadToEnd(); 
     } 
    } 
catch (FileNotFoundException ex) 
    { 
     MessageBox.Show("The file don't exist!", "Problems!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
     // Write error. 
     Console.WriteLine(ex); 
    } 
+0

@Downvoter,關心評論? – Habib 2012-07-26 07:07:05

+0

感謝您的回答!當我嘗試你的代碼時,我會在Streamreader下面看到一條紅線,我猜這裏必須有更多的代碼來聲明這個? – 2012-07-26 07:24:10

+0

只需右鍵單擊它並單擊解析,或在頂部包含'using System.IO;' – Habib 2012-07-26 07:25:05

0

您只有在出現意外錯誤時才使用try/catch,或者您期待訪問資源時出現錯誤。這聽起來有點令人困惑,但在你的事業中,卻沒有。

但是,如果您打開流作爲讀取文件而不檢查文件是否存在,那麼將需要try..catch。

總而言之,try..catch's應用於安全性,以及代碼複雜/長度。

2

使用throw

try 
{ 
    if (!File.Exists("TextFile1.txt")) 
     throw (new Exception("The file don't exist!")); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 
+0

你的邏輯與你的例外狀態完全相反。 – 2012-07-26 07:15:00

+1

你忘了感嘆號!!' – Silvermind 2012-07-26 07:15:39

+0

@Silvermind:謝謝! – Ria 2012-07-26 07:18:18

7
try 
{ 
if (!File.Exists("TextFile1.txt")) 
    throw new FileNotFoundException(); 
} 
catch(FileNotFoundException e) 
{ 
    // your message here. 
} 
6

試試這個:

try 
{ 
    if(!File.Exist("FilePath")) 
     throw new FileNotFoundException(); 

    //The reste of the code 
} 
catch (FileNotFoundException) 
{ 
    MessageBox.Show("The file is not found in the specified location"); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 
+0

捕獲特定異常..:D – AksharRoop 2012-07-26 07:07:51

+0

Yeap,他可以有多個catch,thx ^^ – SidAhmed 2012-07-26 07:13:06

0

與此相關的問題,以下主題將是有趣

http://social.msdn.microsoft.com/Forums/en-NZ/winappswithcsharp/thread/1eb71a80-c59c-4146-aeb6-fefd69f4b4bb

File.Exists API已在窗口8中更改,並且解釋是:

當前檢查文件是否存在的唯一方法是捕獲FileNotFoundException。正如已經指出的有一個明確的檢查和開放是一個競爭條件,因此我不希望有任何文件存在的API添加。我相信文件IO團隊(我不在該團隊中,所以我不確定,但這是我聽說過的)正在考慮讓這個API返回null,而不是在文件不存在時拋出。與File.Exists

方法不是線程安全的,它是從API刪除了Windows 8的所以正好趕上FileNotFoundException異常