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

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

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

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

24.06.2012, 19:53. Просмотров 462. Ответов 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-----.Где я ошибся?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2012, 19:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не срабатывает перехват исключений (C++):

перехват исключений - C++
Ввести два числа. Меньшее заменить полсумой, а большее - удвоенным произведением. Выражение должно быть вычислено в отдельной...

Обработка исключений с пмощью структурированной обработки исключений - C++
Есть функция, которая определенным образом работает с файлами,но при работе с файлами &quot;не подходящего&quot; типа вызывается необработанное...

Коды исключений - C++
Какие ещё, кроме std::bad_alloc, есть коды исключений? Содержит ли исключение информацию о месте своего возникновения? А о конкретной...

Обработка исключений - C++
Уважаемые админы. Знаю, что о помощи надо просить, когда имеются хоть какие-то наработки. К сожалению, тему исключений мало разбирала. А...

Использование исключений - C++
Мне нужно сделать так, чтоб если я введу не число, чтоб выдало собственное исключение, чего-то данный код не срабатывает. Получается в...

Обработка исключений - C++
что то я не пойму а что в плюсах нельзя разве сделать что то типа: try { ... } catch (int) { ... }

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
grizlik78
Эксперт С++
1911 / 1443 / 112
Регистрация: 29.05.2011
Сообщений: 3,000
24.06.2012, 20:06 #2
А зачем здесь перехватывать исключения? Кто сказал, что при ошибке открытия будет брошено исключение? И зачем закрывать файл в цикле?
1
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
24.06.2012, 20:14 #3
Оно и не должно выбрасываться, если файла нет будет установлен failbit. Соответствено надо проверять input_file.fail(), или предварительно перед открытием задать exception mask:
C++
1
input_file.exceptions(std::ifstream::failbit);
тогда будет исключение при failbit.
1
grizlik78
Эксперт С++
1911 / 1443 / 112
Регистрация: 29.05.2011
Сообщений: 3,000
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();
    }
}
1
nanshakov
Студент :)
891 / 324 / 10
Регистрация: 29.01.2011
Сообщений: 1,680
24.06.2012, 20:28  [ТС] #5
Спасибо всем,кто ответил.
0
nanshakov
Студент :)
891 / 324 / 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 ();
...
}
1
Миниатюры
Не срабатывает перехват исключений  
grizlik78
Эксперт С++
1911 / 1443 / 112
Регистрация: 29.05.2011
Сообщений: 3,000
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 ();
    }
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2012, 21:42
Привет! Вот еще темы с ответами:

Обработка исключений - C++
Добрый день! Столкнулся с такой проблемой. У меня есть класс class MyClass { public: MyClass(/* какие то параметры*/); ...

Обработка исключений - C++
Почему не перехватывает ошибку и не выводит Error? а прога сама прекращает работу. #include &lt;iostream&gt; using namespace std; ...

Обработка исключений - C++
Есть код программы по поиску совершенных чисел а интервале от a до n. #include &lt;iostream&gt; using namespace std; int...

обработка исключений - C++
Есть вот такой код: #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int _tmain(int argc, _TCHAR* argv) { ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.06.2012, 21:42
Ответ Создать тему
Опции темы

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