2017-01-23 6 views
0

この関数は、パラメーターとして取得するパスで最も長いファイルを見つける必要があります。
問題をうまく処理しているようですが、例外を処理する方法がわかりません。
PathTooLongExceptionの場合_MaxPathを-2に設定して関数を終了し、他の例外が発生した場合は-1に設定して関数を終了し、最長のファイルパスに設定します。
この場合、例外を処理する正しい方法は何か分かりません。フォルダー内の最長ファイルパス - 例外の処理方法

おそらくばかな質問が、私は、C#での新たなんだ...

static int _MaxPath = 0; 
public static void GetLongestFilePath(string p) 
{ 
    try 
    { 
     foreach (string d in Directory.GetDirectories(p)) 
     { 
      foreach (string f in Directory.GetFiles(d)) 
      { 
       if (f.Length > _MaxPath) 
       { 
        _MaxPath = f.Length; 
       } 
      } 
      GetLongestFilePath(d); 
     } 
    } 
    catch (Exception e) 
    { 
     if (e is PathTooLongException) 
     { 
      _MaxPath = -1; 
     } 
    } 
    finally 
    { 
     System.Environment.Exit(-99); 
    } 
} 
+1

なぜ静的フィールドに結果を格納するのですか?それは便利ではない。また、 'Get'で始まる名前のメソッドは、何かを返すことになっています。voidであってはいけません。 –

答えて

1

あなたは複数の例外の種類で複数のcatchブロックを持つことができます。

try 
    { 
     // ... 
    } 
    catch (PathTooLongException e) 
    { 
     _MaxPath = -2; 
     return; 
    } 
    catch (Exception e) //anything else 
    { 
     _MaxPath = -1; 
     // ... 
    } 
    finally 
    { 
     // ... 
    } 
+0

ありがとう、しかし、例外の場合、どのように関数を終了する必要がありますか? 最後にSystem.Environment.Exit(-99)を使用してデバッグしても、catchステートメントは入力されません。 – Epligam

+0

return文を 'catch'ブロックで使用すると、すぐにメソッドを終了します。あなたはそれを必要としません。 returnステートメントを削除すると、 'finally'ブロックが実行されます。 – chadnt

+0

私は理由を理解できませんが、私はfinallyブロックを持っているときにcatchブロックに入っていません。また、私がリターンを使うと、再帰的なので、関数を完全に終了しないかもしれません。 – Epligam

1

あなたが特定の例外タイプをキャッチすることができます

static int _MaxPath = 0; 
public static void GetLongestFilePath(string p) 
{ 
    try 
    { 
     foreach (string d in Directory.GetDirectories(p)) 
     { 
      foreach (string f in Directory.GetFiles(d)) 
      { 
       if (f.Length > _MaxPath) 
       { 
        _MaxPath = f.Length; 
       } 
      } 
      GetLongestFilePath(d); 
     } 
    } 
    catch (PathTooLongException e) 
    { 
     _MaxPath = -2; 
    } 
    catch (Exception e) 
    { 
     _MaxPath = -1; 
    } 
    finally 
    { 
     System.Environment.Exit(-99); 
    } 
}