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

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

Восстановить пароль Регистрация
 
nanshakov
Студент :)
890 / 323 / 10
Регистрация: 29.01.2011
Сообщений: 1,680
24.06.2012, 19:53     Не срабатывает перехват исключений #1
Решил перехватить открыие файла,но что то не получается.Компилиться без проблем,но не работает:
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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
24.06.2012, 20:06     Не срабатывает перехват исключений #2
А зачем здесь перехватывать исключения? Кто сказал, что при ошибке открытия будет брошено исключение? И зачем закрывать файл в цикле?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
24.06.2012, 20:14     Не срабатывает перехват исключений #3
Оно и не должно выбрасываться, если файла нет будет установлен failbit. Соответствено надо проверять input_file.fail(), или предварительно перед открытием задать exception mask:
C++
1
input_file.exceptions(std::ifstream::failbit);
тогда будет исключение при failbit.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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++ Классы исключений

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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     Не срабатывает перехват исключений
Ответ Создать тему
Опции темы

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