【问题标题】:Are Exceptions Thrown when 'std::fstream' Fails to Open?'std::fstream' 无法打开时是否会引发异常?
【发布时间】:2026-01-19 19:45:02
【问题描述】:

有没有办法让fstream 在无法打开文件时引发异常,我该怎么做?

我知道std::fstream.exceptions() 方法以及如何为其分配位,但是什么“位”会引发异常?

【问题讨论】:

    标签: c++ c++11 exception filestream c++-standard-library


    【解决方案1】:

    Iostream 可以是三种不同故障状态中的任何一种:fail、bad 和 eof。 documentation 清楚地向您展示了如何使其中任何一个引发异常;默认情况下,它们都不会这样做,但如果发生任何故障模式,则在布尔上下文中评估流对象会返回 false

    示例:

    #include <fstream>
    
    std::ifstream infile;
    infile.expections(std::ios::failbit);
    infile.open("foo.txt");    // throws on failure
    

    【讨论】:

    • 但是 Google 上可访问的资源实际上并没有告诉文件在打开时是否会抛出错误。
    • @JeroenBollen:open 文档说将设置“失败”位。
    【解决方案2】:

    当你打开一个文件失败时,比较流如

    if(mystream==false)
    {
    //File wasn't opened properly
    throw openFailed
    }
    

    如果您检测到流为假,则抛出您自己编写的异常。

    【讨论】:

    • 问题是我需要异常对象,因为我是多线程的。
    最近更新 更多