2011-03-21 14 views
2

私はこのコードを持っている:例外++問題

try 
{ 
    files = Directory::GetFiles(path); 
}catch(int){ 
    MessageBox::Show("Error getting files."); 
    return 0; 
} 

をしかし、私はそれを実行し、GetFilesクラッシュしたときに、それはまだ未処理の例外を報告します。どうして?

+1

を、正しい対応する例外タイプを使用し、 intの代わりに。 – moala

+2

あなたは正確に何を投げていますか?intですか? intポインタ? intではない何か? – Rup

答えて

7

タイプintの例外をキャッチしているためです。

catch(...)を使用して、あらゆる種類の例外をキャッチします。

+0

私はすべての例外がintに変換可能だと考えました。ありがとう。 –

0

"未処理の例外"は、Windowsでメモリ保護エラーを意味するためにも使用されていると思いますが、ここでキャッチしようとしているC++の例外とは必ずしも同じではありません。

おそらく、渡しているパスにガベージデータが含まれている可能性があります。パスがOKの場合は、intだけでなく、関数によってスローされる可能性があるすべてのタイプの例外をキャッチする必要があります。あなたがそれらのいずれかをキャッチしない

IOException  
UnauthorizedAccessException  
ArgumentException 
ArgumentNullException 
PathTooLongException  
DirectoryNotFoundException 

2

MSDNによると、GetFilesは、以下の例外を投げることができます。キャッチする唯一の例外はでスローできないタイプのintです。すべての例外をキャッチする問題を解決するには、上記の例外ごとにcatchステートメントを追加し、それらを適切に処理するか、省略記号を使用するには:キャッチ(...)では

try { 
    files = Directory::GetFiles(path); 
} catch(...) { 
    MessageBox::Show("Error getting files."); 
    return 0; 
} 
関連する問題