【问题标题】:Why does std::ifstream not throw an exception even when exceptions are specifically enabled?为什么即使专门启用了异常,std::ifstream 也不会抛出异常?
【发布时间】:2021-05-28 03:58:27
【问题描述】:

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

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

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

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

我在UbuntuGCC 上进行了测试。

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

【问题讨论】:

  • 回复:“这很糟糕”——它不会默默地失败。您可以检查它是否成功。并且任何输入操作也会失败。你不能盲目地尝试一堆输入而不检查它是否成功。许多程序员成功地编写了复杂的程序,而不需要 I/O 失败的异常。
  • @PeteBecker:当然可以,但是当我们遇到异常时,检查返回值是一种相当过时且繁琐的编程方式。

标签: c++ gcc ifstream


【解决方案1】:

失败时,open() 设置 failbit,而不是 badbit。您不是要求ifstreamfailbit 上抛出异常。

【讨论】:

    猜你喜欢
    • 2021-06-19
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2021-04-28
    相关资源
    最近更新 更多