私はこのコードを持っている:例外++問題
try
{
files = Directory::GetFiles(path);
}catch(int){
MessageBox::Show("Error getting files.");
return 0;
}
をしかし、私はそれを実行し、GetFiles
クラッシュしたときに、それはまだ未処理の例外を報告します。どうして?
私はこのコードを持っている:例外++問題
try
{
files = Directory::GetFiles(path);
}catch(int){
MessageBox::Show("Error getting files.");
return 0;
}
をしかし、私はそれを実行し、GetFiles
クラッシュしたときに、それはまだ未処理の例外を報告します。どうして?
タイプint
の例外をキャッチしているためです。
catch(...)
を使用して、あらゆる種類の例外をキャッチします。
私はすべての例外がintに変換可能だと考えました。ありがとう。 –
"未処理の例外"は、Windowsでメモリ保護エラーを意味するためにも使用されていると思いますが、ここでキャッチしようとしているC++の例外とは必ずしも同じではありません。
おそらく、渡しているパスにガベージデータが含まれている可能性があります。パスがOKの場合は、int
だけでなく、関数によってスローされる可能性があるすべてのタイプの例外をキャッチする必要があります。あなたがそれらのいずれかをキャッチしない
IOException
UnauthorizedAccessException
ArgumentException
ArgumentNullException
PathTooLongException
DirectoryNotFoundException
:
MSDNによると、GetFiles
は、以下の例外を投げることができます。キャッチする唯一の例外はでスローできないタイプのint
です。すべての例外をキャッチする問題を解決するには、上記の例外ごとにcatchステートメントを追加し、それらを適切に処理するか、省略記号を使用するには:キャッチ(...)では
try {
files = Directory::GetFiles(path);
} catch(...) {
MessageBox::Show("Error getting files.");
return 0;
}
を、正しい対応する例外タイプを使用し、 intの代わりに。 – moala
あなたは正確に何を投げていますか?intですか? intポインタ? intではない何か? – Rup