Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
akk
44 / 44 / 17
Регистрация: 28.01.2012
Сообщений: 341
#1

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

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

У меня такой вопрос, как можно обработать исключение, если к примеру не получается открыть файл.
То есть я делаю так:
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2013, 19:53
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Исключения потоков (C++):

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

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

Исключения
У Эккеля, во втором томе, в главе про исключения, встретил конструкцию такого...

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

Исключения
Не совсем понимаю, как действуют исключения, для чего использовать свои классы...

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

9
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
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, можно было сразу бесконечный цикл замутить для надёжности

0
akk
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
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
28.05.2013, 21:22 #5
Цитата Сообщение от akk Посмотреть сообщение
И вообще как правильно обрабатывать исключения для файлов?
Так же как и любые другие исключения. Ставите обработчик на нужный тип исключения и выполняете необходимые действия.
0
Nick Alte
Эксперт С++
1646 / 1018 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
28.05.2013, 21:27 #6
А зачем вообще обрабатывать ошибки файловых потоков как исключения? Ведь не зря же по умолчанию те ошибки обрабатываются тихо-мирно, без исключений и прочих сильнодействующих средств.
0
akk
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
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
28.05.2013, 22:11 #8
в 2008 студии код из первого поста работает. кидается то, что надо и так же ловится.
что у вас - неизвестно. у себя вы можете продебажить функцию open и посмотреть, что там происходит на самом деле.
0
akk
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
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
29.05.2013, 00:05 #10
gdb - это ахтунг в сравнении с нормальным гуевым дебагером.
можно попробовать QtCreator - вроде он умеет что-то дебажить.
Про другие ничего не могу сказать.
0
29.05.2013, 00:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2013, 00:05
Привет! Вот еще темы с решениями:

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

исключения
Помогите пожалуйста создать мнoгoурoвнeвую иeрaрхию нaслeдoвaния клaссoв...

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

Исключения
Помогите пожалуйста!!! Написал два исключения, но выводит что-то неправильно....


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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