Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nanshakov
Студент :)
890 / 323 / 10
Регистрация: 29.01.2011
Сообщений: 1,680
#1

Не срабатывает перехват исключений - C++

24.06.2012, 19:53. Просмотров 421. Ответов 6
Метки нет (Все метки)

Решил перехватить открыие файла,но что то не получается.Компилиться без проблем,но не работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void ReadAutorunscripts()
 {
    try
        {
            std::ifstream input_file("Autorunscripts.txt");
            char line[101]; 
            while (! input_file.eof())
                { 
                    input_file.getline(line, sizeof(line));
                    printf("-----Autorunscripts-----\n");
                    std::cout << line << std::endl;
                    printf("-----Autorunscripts-----\n");
                    input_file.close ();
                }
                }
        catch(...)
            {
                printf("SYSTEM::ERROR::cannot load Autorunscripts!\n");
                _getch;
    }
}
Если файла нет.Консоль бесконечно крутиться,выводя -----Autorunscripts-----.Где я ошибся?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2012, 19:53     Не срабатывает перехват исключений
Посмотрите здесь:

C++ обратотка исключений
C++ Обработка исключений
Обработка исключений C++
перехват исключений C++
Обработка исключений C++
C++ обработка исключений
Обработчик исключений C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
 Аватар для grizlik78
1890 / 1422 / 104
Регистрация: 29.05.2011
Сообщений: 2,977
24.06.2012, 20:06     Не срабатывает перехват исключений #2
А зачем здесь перехватывать исключения? Кто сказал, что при ошибке открытия будет брошено исключение? И зачем закрывать файл в цикле?
gray_fox
What a waste!
 Аватар для gray_fox
1250 / 1133 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
24.06.2012, 20:14     Не срабатывает перехват исключений #3
Оно и не должно выбрасываться, если файла нет будет установлен failbit. Соответствено надо проверять input_file.fail(), или предварительно перед открытием задать exception mask:
C++
1
input_file.exceptions(std::ifstream::failbit);
тогда будет исключение при failbit.
grizlik78
Эксперт С++
 Аватар для grizlik78
1890 / 1422 / 104
Регистрация: 29.05.2011
Сообщений: 2,977
24.06.2012, 20:14     Не срабатывает перехват исключений #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void ReadAutorunscripts()
{
    std::ifstream input_file("Autorunscripts.txt");
    if (!input_file)
    {
        char line[101]; 
        while (input_file.getline(line, sizeof(line)))
        { 
            printf("-----Autorunscripts-----\n");
            std::cout << line << std::endl;
            printf("-----Autorunscripts-----\n");
        }
        input_file.close ();
    }
    else
    {
        printf("SYSTEM::ERROR::cannot load Autorunscripts!\n");
        _getch();
    }
}
nanshakov
Студент :)
890 / 323 / 10
Регистрация: 29.01.2011
Сообщений: 1,680
24.06.2012, 20:28  [ТС]     Не срабатывает перехват исключений #5
Спасибо всем,кто ответил.
nanshakov
Студент :)
890 / 323 / 10
Регистрация: 29.01.2011
Сообщений: 1,680
24.06.2012, 21:38  [ТС]     Не срабатывает перехват исключений #6
Так,я кажется что то не так сделал.При наличии Autorunscripts.txt все равно выбивает исключение(подставил код выше.)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void ReadAutorunscripts()
{
    std::ifstream input_file("Autorunscripts.txt");
    if (!input_file)
    {
        char line[101]; 
        while (input_file.getline(line, sizeof(line)))
        { 
            printf("-----Autorunscripts-----\n");
            std::cout << line << std::endl;
            printf("-----Autorunscripts-----\n");
        }
        input_file.close ();
    }
    else
    {
        HANDLE hConsole;
        hConsole = GetStdHandle( STD_OUTPUT_HANDLE );
        SetConsoleTextAttribute( hConsole, 12);
        printf("SYSTEM::ERROR::cannot load Autorunscripts!\n");
        SetConsoleTextAttribute( hConsole, 7 );
    }
}
...
int main()
{
...
ReadAutorunscripts ();
...
}
Миниатюры
Не срабатывает перехват исключений  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2012, 21:42     Не срабатывает перехват исключений
Еще ссылки по теме:

Обработка исключений C++
Обработка исключений C++
Проверка исключений C++
C++ Классы исключений
C++ Обработка исключений

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
 Аватар для grizlik78
1890 / 1422 / 104
Регистрация: 29.05.2011
Сообщений: 2,977
24.06.2012, 21:42     Не срабатывает перехват исключений #7
Это я перепутал местами "then" и "else".

Добавлено через 58 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void ReadAutorunscripts()
{
    std::ifstream input_file("Autorunscripts.txt");
    if (!input_file)
    {
        printf("SYSTEM::ERROR::cannot load Autorunscripts!\n");
        _getch();
    }
    else
    {
        char line[101]; 
        while (input_file.getline(line, sizeof(line)))
        { 
            printf("-----Autorunscripts-----\n");
            std::cout << line << std::endl;
            printf("-----Autorunscripts-----\n");
        }
        input_file.close ();
    }
}
Yandex
Объявления
24.06.2012, 21:42     Не срабатывает перехват исключений
Ответ Создать тему
Опции темы

Текущее время: 09:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru