2016-10-12 9 views
0

私は簡単なプログラムを作成しました。私はtrycatchステートメントのためのループを追加したいので、ユーザーが入力を書き込むと、彼はエラーメッセージを受け取り、プログラムは彼に再度書き込ませる。ハンドリング例外のルーピング

Console.WriteLine("Enter The File Location"); 
string userValue = Console.ReadLine(); 
try 
{ 
    string content = File.ReadAllText(userValue); 
    Console.WriteLine(content);    
} 
catch (FileNotFoundException ex) 
{ 
    Console.WriteLine("There was a Problem"); 
    Console.WriteLine(ex.Message); 
} 
catch (DirectoryNotFoundException ex) 
{ 
    Console.WriteLine("There was a Problem"); 
    Console.WriteLine("Could not find the Directory"); 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.Message); 
} 

Console.ReadLine(); 
+3

あなたの質問は何ですか? –

+0

私の質問は私がループを追加したいので、ユーザーが間違った入力(ファイルが見つからないか、ディレクトリが見つからない)を与えた場合、プログラムはユーザーに再度入力を与え、同じことが再び起こるようにします。 –

+1

ループはあなたのtry/catchとは何の関係もありません。あなたのアプリケーションフローはループになります。また、ファイルやディレクトリが存在しないことが実際に例外であるかどうかを検討してください。代わりに、入力の検証とメッセージの表示だけを検討してください。 –

答えて

1

whileループ内にコードをラップすることができます。このループは、正常な操作が完了するまでコードを繰り返します。

var success = false; 
while (success == false) 
{ 
    Console.WriteLine("Enter The File Location"); 
    string userValue = Console.ReadLine(); 
    try 
    { 
     string content = File.ReadAllText(userValue); 
     Console.WriteLine(content);    
     success = true; 
    } 
    catch (FileNotFoundException ex) 
    { 
     Console.WriteLine("There was a Problem"); 
     Console.WriteLine(ex.Message); 
    } 
    catch (DirectoryNotFoundException ex) 
    { 
     Console.WriteLine("There was a Problem"); 
     Console.WriteLine("Could not find the Directory"); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    }  
} 
0

私は、ユーザー入力が(あなたが入力キーの押下を検出した場合、または完全なコマンドまたはその他を持っている)に行われたときに指定した条件で構築しばらく使用します。 その後、その条件が満たされていない間にループすることができます(そして回復不可能なエラーはありません)。上記のコードを使用して、ユーザーのエラーをチェックし、必要なときにメッセージを出力します。

0

ループは必要ありません。 Yuoは再帰関数を使うことができます。 試してみてください:https://dotnetfiddle.net/4NR26P

+0

私は再帰を使用することは最善の考えではないと思います - あなたはこれで 'StackOverflowException'を求めています。 –

+0

彼は間違いで質問を追加し、「やり直しますか?」と尋ねることができます。ユーザーが「はい」と答えた場合は、関数を再度呼び出すか、そうでない場合は終了します。再帰!= StackOverflowExceptionがうまくいったら:-D – Alberto

+1

これは 'while'ループでも実現できます。 –

1

無効な入力を確認できる場合は、通常は例外を発生させるのではなく、入力することをお勧めします。 あなたの場合、File.Exists(...)および/またはDirectory.Exists(...)をユーザーの入力に基づいてチェックすることができます。 これらはループ文の条件にすることができます。正しいディレクトリとファイルを使用するまで、プロンプトを表示し続けます。 しかし、にはが有効なファイルとディレクトリを知っていると予想しているので、これは必ずしも最良のユーザーエクスペリエンスではないことをお勧めします。確かに、彼らがループから抜け出す方法を提供する必要があります。

関連する問題