Есть ли эквивалент для fstream, который выдает ошибку при открытии файла?

0

Как говорится в заголовке, есть ли способ ускорить то же самое, что и с fstream, но с diff, который он будет бросать на неудачу, не установить какой-либо флаг внутри потока?
Я знаю, что могу вручную проверять и возвращать/бросать, но я предпочитаю не менять свой код с помощью проверок...

  • 6
    Вы всегда можете настроить ios_base::exceptions так, чтобы ios_base::failure когда failbit включен в маске ожидания (которая включает в себя ошибку открытия).
  • 0
    Я знаю об этом ... если никто не придумает лучшего решения, я воспользуюсь этим.
Показать ещё 3 комментария
Теги:
boost
fstream

1 ответ

1
Лучший ответ

Мое мышление:

Использование потоков с исключениями и "не использовать polute [...] код с проверками" приведет к созданию бесполезных диагностических сообщений в вашем коде:

#include <iostream>
#include <fstream>

int main() {
    std::fstream f;
    f.exceptions(std::ios_base::failbit);
    try {
        f.open("Not-Existing");
        int formatted_value;
        f >> formatted_value; // No matching input.
        // ... and imagine more
        if(f.eof()) { /* To ensure the entire stream is consumed, is not handled */ }
    }
    catch(const std::exception& e) {
        std::cerr << "Failure [Something turned out wrong]" << std::endl;
    }
}
  • 1
    Я не думаю, что исключения являются хорошей идеей, но если вы действительно хотите пойти по этому пути, вы, вероятно, захотите отключить исключения перед чтением. В противном случае вы получите исключение и для конца файла.
  • 0
    @JamesKanze Я не говорю «исключения - хорошая идея» в этом контексте!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню