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

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

Войти
Регистрация
Восстановить пароль
 
akk
44 / 44 / 7
Регистрация: 28.01.2012
Сообщений: 341
#1

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

27.05.2013, 19:53. Просмотров 625. Ответов 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++):

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

Исключения - C++
можно ли возвращаться к выполнению кода после обработки исключения, например try{ func1();//обе ф-и могут вызывать исключение...

исключения - C++
Есть тестовое задание. Реализовать класс. Есть метод. * @note The function does not validate the index, if the index is out ...

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

исключения - C++
скажите пожалуйстокак написать через исключение if(n&lt;=0 || n&gt;=100000000) { fclose(f); f=fopen(&quot;output.txt&quot;, &quot;w&quot;); ...

Исключения - C++
По каким причинам объявление исключения в catch-обработчике следует делать ссылкой? Что-то не пойму, почему по-обычному нельзя?

9
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 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 / 7
Регистрация: 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
:)
Эксперт С++
4619 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.05.2013, 21:22 #5
Цитата Сообщение от akk Посмотреть сообщение
И вообще как правильно обрабатывать исключения для файлов?
Так же как и любые другие исключения. Ставите обработчик на нужный тип исключения и выполняете необходимые действия.
0
Nick Alte
Эксперт С++
1644 / 1016 / 120
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
28.05.2013, 21:27 #6
А зачем вообще обрабатывать ошибки файловых потоков как исключения? Ведь не зря же по умолчанию те ошибки обрабатываются тихо-мирно, без исключений и прочих сильнодействующих средств.
0
akk
44 / 44 / 7
Регистрация: 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
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
28.05.2013, 22:11 #8
в 2008 студии код из первого поста работает. кидается то, что надо и так же ловится.
что у вас - неизвестно. у себя вы можете продебажить функцию open и посмотреть, что там происходит на самом деле.
0
akk
44 / 44 / 7
Регистрация: 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
1484 / 1130 / 45
Регистрация: 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
Привет! Вот еще темы с ответами:

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

Исключения - C++
У Эккеля, во втором томе, в главе про исключения, встретил конструкцию такого вида: T&amp; operator(int i) throw(RangeError) { if(i...

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

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


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

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

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