为何无法捕获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及以上标准后无需额外链接选项
- GCC:添加
内容的提问来源于stack exchange,提问作者HelloWorld
相关产品推荐
相关产品推荐

