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

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


person NoSenseEtAl    schedule 03.01.2014    source источник
comment
Вы всегда можете настроить маску ios_base::exceptions так, чтобы ios_base::failure выдавался, когда failbit включен в маске ожидания (что включает в себя неудачное открытие).   -  person 0x499602D2    schedule 03.01.2014
comment
Я знаю об этом ... если никто не предложит лучшего решения, я воспользуюсь им.   -  person NoSenseEtAl    schedule 03.01.2014
comment
Это уже особенность стандартных iostreams. Чего не хватает?   -  person Kerrek SB    schedule 03.01.2014
comment
ничего особенного, я просто не хотел, чтобы в коде была установка флага или .is_open? Назовите меня ленивым или антифлаготом, если хотите :)   -  person NoSenseEtAl    schedule 03.01.2014
comment
Проверка ошибок, с которыми вы могли бы справиться, не загрязнения. Это хорошая практика программирования.   -  person James Kanze    schedule 03.01.2014


Ответы (1)


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

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

#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;
    }
}
person Community    schedule 03.01.2014
comment
Я не думаю, что исключения - хорошая идея, но если вы действительно хотите пойти по этому пути, вы, вероятно, захотите отключить исключения перед чтением. В противном случае вы также получите исключение для конца файла. - person James Kanze; 03.01.2014
comment
@JamesKanze Я не говорю, что «исключения - хорошая идея» в этом контексте! - person ; 04.01.2014