2011-01-07 5 views
3

MODI(Microsoft Office Document Imaging)OCRを使用すると、画像にテキストが含まれないことがあります。したがって、doc.OCRは例外をスローします。C#の例外処理 - どのように?

public static string recognize(string filepath, MODI.MiLANGUAGES language = MODI.MiLANGUAGES.miLANG_RUSSIAN, bool straightenimage = true) 
    { 
     if (!File.Exists(filepath)) return "error 1: File does not exist"; 
     MODI.Document doc = new MODI.Document(); 
     doc.Create(filepath); 

     try 
     { 
      doc.OCR(language, false, false); 
     } 
     catch 
     { 
      // 
     } 
     MODI.Image image = (MODI.Image)doc.Images[0]; 

     string result=""; 
     foreach (MODI.Word worditems in image.Layout.Words) 
     { 
      result += worditems.Text + ' '; 
      if (worditems.Text[worditems.Text.Length - 1] == '?') break; 
     } 


     doc.Close(false); 
     System.Runtime.InteropServices.Marshal.ReleaseComObject(doc); 
     System.Runtime.InteropServices.Marshal.FinalReleaseComObject(doc); 
     System.Runtime.InteropServices.Marshal.ReleaseComObject(image); 
     System.Runtime.InteropServices.Marshal.FinalReleaseComObject(image); 
     image = null; 
     doc = null; 
     GC.Collect(); 
     GC.WaitForPendingFinalizers(); 

     return result; 

    } 

は、このコードは、アプリケーションを終了し、私は:(

を必要としないものを私は何もコードであり道の?

+0

明確にするには、例外を無視したいだけですか? –

+0

例外はスローされていますか?この方法で正確にスローされたと確信していますか? –

+1

そのコードは例外を呑み込むように見えます。アプリケーションを終了する方法がわかりません。いくつかのコードがありますか? –

答えて

2

あなたがしている95%に起こっていないようにそれが消えて作るにはどうすればよいですあなたは投稿:

try 
{ 
    doc.OCR(language, false, false); 
} 
catch 
{ 
    // Here you would check the exception details 
    // and decide if this is an exception you need 
    // and want to handle or if it is an "acceptable" 
    // error - at which point you could popup a message 
    // box, write a log or doing something else 
} 
ドキュメントが空で、その後、他のエラーのためのさまざまな例外ハンドラを持っているときに発生する例外タイプをキャッチするのが賢明だろうと述べ

あなたが(またはデバッグを経由して)あなたが出て作業することができますどの例外タイプキャッチするOCRメソッドのドキュメントを見れば -

try 
{ 
    doc.OCR(language, false, false); 
} 
catch (DocumentEmptyException dex) 
{ 
} 
catch 
{ 
} 

DocumentEmptyExceptionを発生することがありsが、私は例外の種類がスローされない、と仮定し、あります

EDIT(あなたの編集を見た後)

あなたは例外がdoc.OCR(...)メソッドからスローされていますか?あなたの編集では、キャッチの後に追加のコードを追加しましたが、そこから来ている可能性はありますか?

例えば、キャッチ後の行:あなたのドキュメントが空で、(catchブロックはそれに何も持っていないとして)ので、例外がスローされ、無視されている場合は

MODI.Image image = (MODI.Image)doc.Images[0]; 

は、この行は、作業を続けるん?

+0

これで、すべてのコードがtryブロック内にあるはずです。ありがとう! –

+0

しかし、私が知りたいことが一つあります。例外タイプとは何ですか? see image - > http://img89.imageshack.us/img89/8884/testnc.jpg –

+0

screengrabからは、エラーを説明するメッセージとともにジェネリックcom例外がスローされるようです。例外が詳細を含むInnerExceptionを持っているかどうかをチェックする価値があるかもしれません – MrEyes

1

あなたは非常に悪い例外を飲み込むだけで、キャッチブロックに何もしていません。コードは引き続き実行され、doc変数を使用しようとしますが、.OCR呼び出しが失敗したため、後で別の例外がスローされる可能性があります。たとえば、OCRが失敗した場合、doc.Images[0]がクラッシュする可能性があります。したがって、何かを返すことによってメソッドの実行を終了するか、メソッド全体をtry/catchブロックに入れます。