You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查fmt::output_file是否成功打开以进行写入?

关于fmt::output_file的文件打开状态检查

可行性说明

fmt::output_file支持检查文件是否成功打开,它提供了两种错误处理途径:异常抛出和错误码捕获,完全满足检查文件写入状态的需求。

惯用实现方式

1. 异常处理(推荐,符合fmt库设计风格)

fmt::output_file的默认构造逻辑是:如果文件打开失败,会直接抛出std::system_error异常。通过try-catch块捕获异常,即可处理打开失败的场景。

示例代码:

#include <fmt/os.h>
#include <stdexcept>
#include <iostream>

int main() {
    try {
        fmt::output_file out("test.txt");
        // 文件成功打开,执行写入操作
        out.print("Hello, fmt!\n");
    } catch (const std::system_error& e) {
        // 处理打开失败的情况
        std::cerr << "文件打开失败: " << e.what() << '\n';
        return 1;
    }
    return 0;
}

2. 非抛出式错误码捕获

如果你的代码环境禁用异常,可以使用带std::error_code参数的构造函数重载,通过错误码来判断文件是否成功打开。

示例代码:

#include <fmt/os.h>
#include <iostream>
#include <system_error>

int main() {
    std::error_code ec;
    fmt::output_file out("test.txt", ec);
    if (ec) {
        // 文件打开失败
        std::cerr << "文件打开失败: " << ec.message() << '\n';
        return 1;
    }
    // 文件成功打开,执行写入
    out.print("Hello, fmt!\n");
    return 0;
}

补充说明

fmt库的设计偏好使用异常来报告错误,因此第一种异常处理的写法是更符合惯用风格的选择。只有在明确禁止异常的场景下,才推荐使用第二种错误码捕获的方式。

内容的提问来源于stack exchange,提问作者ridilculous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:45:28