首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ofstream流异常处理

ofstream流异常处理
EN

Stack Overflow用户
提问于 2012-04-27 00:53:49
回答 3查看 18.6K关注 0票数 13

我故意让这个方法写入文件,所以我尝试处理写入关闭文件的可能性的异常:

代码语言:javascript
复制
void printMe(ofstream& file)
{
        try
        {
            file << "\t"+m_Type+"\t"+m_Id";"+"\n";
        }
        catch (std::exception &e)
        {
            cout << "exception !! " << endl ;
        }
};

但很明显,std::exception不是适合于关闭文件错误的异常,因为我故意尝试在已经关闭的文件上使用此方法,但我的“异常!!”未生成评论。

那么我应该写什么异常呢??

EN

回答 3

Stack Overflow用户

发布于 2012-04-27 00:58:16

默认情况下,流不会抛出异常,但您可以通过函数调用file.exceptions(~goodbit)告诉它们抛出异常。

相反,检测错误的正常方法是简单地检查流的状态:

代码语言:javascript
复制
if (!file)
    cout << "error!! " << endl ;

这样做的原因是,在许多常见情况下,无效读取是一个小问题,而不是一个大问题:

代码语言:javascript
复制
while(std::cin >> input) {
    std::cout << input << '\n';
} //read until there's no more input, or an invalid input is found
// when the read fails, that's usually not an error, we simply continue

对比:

代码语言:javascript
复制
for(;;) {
    try {
        std::cin >> input;
        std::cout << input << '\n';
    } catch(...) {
        break;
    }
}

现场观看:http://ideone.com/uWgfwj

票数 18
EN

Stack Overflow用户

发布于 2012-04-27 00:58:39

类型的异常,但是请注意,您应该使用设置适当的标志来生成异常,否则将只设置内部状态标志来指示错误,这是流的默认行为。

票数 5
EN

Stack Overflow用户

发布于 2020-10-21 16:27:30

请考虑以下内容:

代码语言:javascript
复制
void printMe(ofstream& file)
{
        file.exceptions(std::ofstream::badbit | std::ofstream::failbit);
        try
        {
            file << "\t"+m_Type+"\t"+m_Id";"+"\n";
        }
        catch (std::ofstream::failure &e) 
        {
            std::cerr << e.what() << std::endl;
        }
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10337915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档