Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
44 / 44 / 17
Регистрация: 28.01.2012
Сообщений: 341
1

Исключения потоков

27.05.2013, 19:53. Показов 1198. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня такой вопрос, как можно обработать исключение, если к примеру не получается открыть файл.
То есть я делаю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    file.clear(); // очистить биты
    file.exceptions(ios_base::failbit);
    try
    {
        file.open(filename);
    }
    catch(ios_base::failure) 
    { 
        file.exceptions(ios_base::goodbit);
        cerr << "file not found\n";
        exit(-1);
 
    }
а нужно к примеру предложить ввести путь и название.
Т е
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    char filename[20]="myfile.txt";
file.clear(); // очистить биты
    file.exceptions(ios_base::failbit);
    try
    {
        file.open(filename);
    }
    catch(ios_base::failure) 
    { 
        file.exceptions(ios_base::goodbit);
 
        cout<<"Vvedite nazvanie faila"; cin>>filename;
       // file.open(filename);
 
    }
как с catch можно будет опять попасть в try?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2013, 19:53
Ответы с готовыми решениями:

Создание и завершение процессов и потоков. Приоритеты выполнения потоков
Здравствуйте. Буду очень раз если поможете понять,что конкретно нужно сделать в вот этом...

Исключения
Ребят, тут такая тема. В общем нужно при вводе данных смотреть на исключения, т.е. если ввели в int...

Исключения в С++
Есть 3 массива arrA, arrB, arrC. В массиве А хранятся числа типа float, в массиве В хранятся числа...

Исключения
Надо сделать исключение в программе. У меня есть список. Есть методы добавить в конец списка, в...

9
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
27.05.2013, 20:05 2
C++
1
2
3
4
5
6
7
8
9
10
11
    bool opened = false;
    ...
    do {
        try {
            ...
            opened = true;
        } catch ( ... ) {
            ...
        }
    } while ( !opened );
    ...
1
Tulosba
27.05.2013, 22:36
  #3

Не по теме:

lazybiz, можно было сразу бесконечный цикл замутить для надёжности :D

0
44 / 44 / 17
Регистрация: 28.01.2012
Сообщений: 341
27.05.2013, 23:18  [ТС] 4
Из-за чего может быть такая ошибка? terminate called after throwing an instance of 'std::ios_base::failure' whar() : basic_ios::clear

Добавлено через 2 минуты
И вообще как правильно обрабатывать исключения для файлов?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
28.05.2013, 21:22 5
Цитата Сообщение от akk Посмотреть сообщение
И вообще как правильно обрабатывать исключения для файлов?
Так же как и любые другие исключения. Ставите обработчик на нужный тип исключения и выполняете необходимые действия.
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
28.05.2013, 21:27 6
А зачем вообще обрабатывать ошибки файловых потоков как исключения? Ведь не зря же по умолчанию те ошибки обрабатываются тихо-мирно, без исключений и прочих сильнодействующих средств.
0
44 / 44 / 17
Регистрация: 28.01.2012
Сообщений: 341
28.05.2013, 22:03  [ТС] 7
Tulosba, сейчас, почему-то появилась такая ошибка
Цитата Сообщение от akk Посмотреть сообщение
terminate called after throwing an instance of 'std::ios_base::failure' whar() : basic_ios::clear
убирается только если убрать исключения
C++
1
2
3
4
5
6
7
8
9
10
11
    flang.exceptions(ios_base::failbit);
    try
    {
 
        flang.open(filelangname);
    }
    catch( ios_base::failure f ) 
    { 
        cerr << "file not found"<< f.what() << endl;
        exit(-1);
    }
Добавлено через 35 минут
Если добавить после catch
C++
1
flang.exceptions(ios::goodbit);
то работает, можете объяснить почему?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
28.05.2013, 22:11 8
в 2008 студии код из первого поста работает. кидается то, что надо и так же ловится.
что у вас - неизвестно. у себя вы можете продебажить функцию open и посмотреть, что там происходит на самом деле.
0
44 / 44 / 17
Регистрация: 28.01.2012
Сообщений: 341
28.05.2013, 23:04  [ТС] 9
Цитата Сообщение от akk Посмотреть сообщение
то работает, можете объяснить почему?
Все разобрался! flang.exceptions(ios::goodbit); отменяет обработку исключения, а у меня получается в следующей функции
C++
1
2
3
4
for(int i=0; i<SIZE_F; i++)
    {
        flang.getline(string, BUF);
    }
то есть нужно читать файл на eof + ограничивать SIZE_F.
Цитата Сообщение от DU Посмотреть сообщение
у себя вы можете продебажить функцию
согласен нужно научится пользоваться дебагером. только я не пользуюсь пока MS VS. Компилирую с помощью g++ с консоли, слышал про GDB, но так и не понял как им пользоваться, есть кроме него другие отладчики, желательно с мануалом на русском?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
29.05.2013, 00:05 10
gdb - это ахтунг в сравнении с нормальным гуевым дебагером.
можно попробовать QtCreator - вроде он умеет что-то дебажить.
Про другие ничего не могу сказать.
0
29.05.2013, 00:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2013, 00:05
Помогаю со студенческими работами здесь

Исключения
читаю про исключения, сама концепция понятна, но стоит ли вообще заострять на исключениях своё...

Исключения
Никак не могу понять, как работают исключения в С++. Может быть кто-нибудь сможет объяснить на...

Исключения
Всем доброго времени суток! В универе дошли до темы &quot;Обработка исключительных ситуаций&quot; и возник...

исключения
пожалуйста, gомогите решить задачу на с++ , кoтoрая пoкaзывaет, чтo функция co cвoим блoкoм try...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru