首页 > 解决方案 > 为什么即使专门启用了异常,std::ifstream 也不会抛出异常?

问题描述

因此,默认情况下std::ifstream,当您打开无效的文件路径时不会引发异常。它相当安静地失败,如果您不使用该fail()方法或类似方法进行检查,它很容易被忽视,这是非常糟糕的。

由于我想在任何类型的故障中获取异常,以便自动通知我,我尝试使用此处exceptions()建议的方法:

std::ifstream input_stream;
input_stream.exceptions(std::ifstream::badbit);
input_stream.open(file_path);

令我惊讶的是,如果文件路径不存在,这仍然不会引发异常。我尝试使用std::ios::badbit,但结果相同。

UbuntuGCC.

为什么这不能按预期工作?

标签: c++gccifstream

解决方案


失败时,open()设置failbit,而不是badbit。您不是要求ifstreamfailbit.


推荐阅读