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

为何无法捕获std::filesystem::filesystem_error异常?

问题原因及解决办法

你的代码核心问题是把try/catch直接放在了全局作用域中,C++语法不允许在函数外部使用try块。编译器无法正确处理这种写法,导致异常抛出后没有进入你写的catch分支,最终触发程序终止。

你怀疑的异常常量性问题不存在,用fs::filesystem_error&捕获完全合法,问题根源不在捕获方式上。

修正后的代码示例

#include <filesystem>
#include <string>

namespace fs = std::filesystem;

int main() {
    std::string error;
    try {
        for (auto it = fs::recursive_directory_iterator("abc"); 
             it != fs::recursive_directory_iterator(); ++it ) {
            // 这里编写你的目录遍历逻辑
        }
    } catch(fs::filesystem_error& exc) {
        error = exc.code().message();
        // 可在此处添加错误打印逻辑,便于调试
        // std::cout << "错误信息:" << error << std::endl;
    }
    return 0;
}

额外注意事项

  • 编译时必须启用C17及以上标准,因为<filesystem>是C17新增的标准库。不同编译器需要添加对应编译选项:
    • GCC:添加 -std=c++17 -lstdc++fs
    • Clang:添加 -std=c++17 -lc++fs
    • MSVC:启用C++17及以上标准后无需额外链接选项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:24:32