2011-08-29 30 views
2

我正在從文本文件中逐行讀取文件並進行一些處理。問題是如果在某一行發生了一些錯誤。然後生成一個異常,我想要的是我想忽略該錯誤並移動到下一行閱讀。 但是,如果生成異常,那麼我不能繼續閱讀輸入行。請幫忙。如何在從文本文件行逐行讀取數據時捕獲並忽略或處理異常

+2

什麼是例外?你的代碼是什麼樣的? – dlev

+0

請發佈相關代碼。 – FishBasketGordo

+1

閱讀關於捕獲異常的文檔。 –

回答

2

如果你真的想「忽略」例外,你可以這樣做:

try 
{ 
    foo(); // Something that may throw an exception 
} 
catch 
{ 
} 

更多信息,請參見http://msdn.microsoft.com/en-us/library/0yd65esw(v=vs.80).aspx

但通常情況下,異常意味着發生了一些不好的事情,你可能想要以某種方式處理。

0

使用try catch和記錄錯誤。您的代碼應該是這樣的:

try 
{ 
    //read lines here 
} 
catch(Exception ex) 
{ 
    //log the exception but don't throw anything. 
} 

你可能會被什麼也不做在抓,但你可能會後悔就晚了。

嘗試捕捉文章:

http://www.homeandlearn.co.uk/csharp/csharp_s5p6.html

0

您只需將您的包裹處理代碼在try/catch塊。

try 
{ 
    DoSomeProcessing(lineThatIreadFromFile); 
} 
catch 
{ 
    // Log or Ignore error here 
} 

但是,請注意,通常,吞嚥異常並不是一個好主意。你應該使你的程序失敗(如果不可恢復的話),或者可能在某個地方記錄它們,這樣你就可以修復程序失敗的原因。

0
try 
{ 
//put the statement throwing the exception here 
} 
catch 
{ 
//will eat the exception 
} 
//execution will continue here 
0

這不是一個好方法。您應該積極主動,並捕獲可從中恢復的特定例外情況。把它們趕到靠近它們拋出的地方。讓其餘的人泡起來,終止這個過程。通過吞噬所有的異常,你會得到一個魯棒性的錯覺,而事實上你的代碼可能充滿了錯誤。對異常處理沒有任何「快速和骯髒」的方法。看到這個answer。通過捕獲非特異性異常,如 System.Exception的,System.SystemException,等等,在應用程序代碼

避免處理錯誤。有些情況下,處理應用程序中的錯誤是可接受的,但這種情況很少見。

應用程序不應處理可能導致意外或可利用狀態的異常。如果無法預測所有可能的異常原因並確保惡意代碼無法利用 生成的應用程序狀態,則應允許應用程序終止而不是處理異常。

0

根據您提供的信息非常有限有兩件事情可以做:

  • 圍成一個空的catch塊有問題的行。等待下一個維護者給你做壞事。

  • 明白爲什麼例外是發生並修改代碼,以便在未來的維護者理解爲什麼它是安全的,你忽略了在一定條件

4

如果我假設你問的正確,這裏是你的代碼可能會是什麼樣子基本輪廓:

using (StreamReader reader = File.OpenText("Path\to\your\file")) 
{ 
    string line = null; 
    while ((line = reader.ReadLine()) != null) 
    { 
     try 
     { 
      ProcessLine(line); 
     } 
     catch { /* Ignore exceptions */ } 
    } 
} 

這通常不是一個好主意,盲目地捕獲所有異常,所以如果可以的話,你應該過濾你的catch塊捕捉到更多的東西例外具體。

1

很難理解你想要達到的目標,但你可能問的是這樣的:

while(condition) 
{ 
    try { 
     //process file line here 
    } 
    catch (Exception ex) { 
     LogException(ex); 
    } 
} 

不是在我看來,一個好的設計決定的方式。如果可以的話,避免它。

相關問題