【发布时间】: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,但结果相同。
我在Ubuntu 和GCC 上进行了测试。
为什么这不能按预期工作?
【问题讨论】:
-
回复:“这很糟糕”——它不会默默地失败。您可以检查它是否成功。并且任何输入操作也会失败。你不能盲目地尝试一堆输入而不检查它是否成功。许多程序员成功地编写了复杂的程序,而不需要 I/O 失败的异常。
-
@PeteBecker:当然可以,但是当我们遇到异常时,检查返回值是一种相当过时且繁琐的编程方式。