Пример для замены файла пользовательского меню - PullRequest
0 голосов
/ 26 апреля 2011

У меня есть приложение, которое пишет файлы из каталога.Это программное обеспечение может читать только 1 файл или несколько из них, например:

Case 1:  "file_1.dat"
Case 2: "file_1.dat", "file_2.dat", "file_3.dat"...etc

Я делаю это, показывает это сообщение, если файл существует в каталоге.У меня проблема в том, что если пользователь пишет «N», а программе необходимо продолжить чтение других файлов, я не знаю, как продолжать задавать тот же вопрос и не отменять процесс, если пользователь пишет «N».Мне нужно, чтобы программа продолжала тот же процесс, обычно проверяя, существуют ли другие файлы.Так как я могу это сделать?

if (File.Exists(binaryFilePath))
            {
                Program.DisplayUserOptionMessage("The file: " + binaryFileName + " exist. You want to overwrite it? Y/N");
                //string overwrite = Console.ReadLine();
                 while (true)
                 {
                    string overwrite = Console.ReadLine();
                    if (overwrite.ToUpper() == "Y")
                    {
                       WriteBinaryFile(frameCodes, binaryFilePath);
                       break;
                    } 
                    else if (overwrite.ToUpper() == "N")
                    {

                        //Program.DisplayExceptionMessage("apply this for all the rest?? ");
                        throw new IOException();                        
                    } 
                    else
                    {
                    Program.DisplayUserOptionMessage("!!Please Select a Valid Option!!");
                    overwrite = Console.ReadLine();
                    continue;
                    } 
                }
            }

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011

Я не думаю, что вам нужен этот while (true) цикл.Скорее while (!isFileProcessed) (подробнее об этом чуть позже).Я предполагаю, что вы перебираете имена входных файлов, если это так, тогда можно задать «Файл существует. Вы хотите перезаписать его? Да / Нет» вопрос для каждого файла.

Однако ваша программа, вероятно, должна быть структурирована иначе:

string[] filesNames = new[] { "file_1.dat", "file_2.dat", "file_3.dat" };
foreach (var name in filesNames)
{  
    // ... 

    if (binaryExists)
    {
        bool isFileProcessed = false;
        Program.DisplayUserOptionMessage("The file: " + binaryFileName 
            + " exist. You want to overwrite it? Y/N");
        while (!isFileProcessed)
        {
            string overwrite = Console.ReadLine();
            if (overwrite.ToUpper() == "Y")
            {
                WriteBinaryFile(frameCodes, binaryFilePath);
                isFileProcessed = true; 
            }
            else if (overwrite.ToUpper() == "N")
            {
                isFileProcessed = true; 
            } 
            else
            {
                // here we do nothing with isFileProcessed flag: 
                // user still needs to select proper option, loop continues 
                Program.DisplayUserOptionMessage(
                    "!!Please Select a Valid Option!!");
            }
        } 
     }
 }
0 голосов
/ 26 апреля 2011

Похоже, что фрагмент вашего кода вызывается циклом, который обрабатывает файлы.Я полагаю, что IOException, который вы бросаете, выбьет вас из этого цикла ... не знаю, зачем вам это нужно, так как это на самом деле не исключение?

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

Другой вариант - просто «вернуть» вместо броскаIOException.

Я думаю, у вас есть еще один небольшой сбой: если пользователь вводит недопустимое значение, вы дважды предложите ему ввести правильное значение.Удалите overwrite = Console.ReadLine(); в цикле else{...} ... вы делаете этот вызов в начале следующего цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...