2016-10-12 5 views
0

Я сделал простую программу. Я хочу добавить цикл для try, catch, поэтому, если пользователь пишет ввод, он получает сообщение об ошибке и программа позволяет ему писать снова.Зацикливание при обработке Исключение

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

Петля не имеет ничего общего с вашей попыткой/уловкой - цикл будет вашим приложением. Также рассмотрите, действительно ли это исключение, что файл или каталог не существует - вместо этого рассмотрите только проверку ввода и отображение сообщений. –

ответ

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

Я хотел бы использовать во время построения с заданным условием, когда пользовательский ввод делается (если вы детектировать Enter нажатие клавиши, или иметь полную команду или иным образом). Затем вы можете выполнить цикл, пока это условие не выполняется (и нет неустранимой ошибки), и используйте свой код выше для проверки ошибок пользователя и печати сообщений, когда это необходимо.

0

Вам не нужен цикл. Yuo может использовать рекурсивную функцию. Попробуйте следующее: https://dotnetfiddle.net/4NR26P

+0

Я думаю, что использование recursion - не самая лучшая идея - вы запрашиваете 'StackOverflowException' с этим. –

+0

Он может добавить вопрос об ошибке и спросить: «Вы хотите повторить попытку?» если пользователь ответит «да», повторите вызов функции, иначе выйдите. Recursion! = StackOverflowException, если это хорошо сделано: -D – Alberto

+1

Вы можете добиться этого с помощью цикла while. –

1

Когда вы можете проверить наличие недопустимого ввода, обычно лучше сделать это, а не исключать исключение. В вашем случае вы можете проверить File.Exists (...) и/или Directory.Exists (...) на основе ввода пользователя. Вы можете сделать эти условия своего оператора цикла, поэтому продолжайте запрашивать пользователя, пока они не будут использовать правильный каталог и файл. Тем не менее, я бы предположил, что это не обязательно лучший пользовательский опыт, так как вы ожидаете от них знать действительный файл и каталог, которого они не могут. Конечно, вы должны предоставить им возможность выйти из цикла.

Смежные вопросы