c++ - `std::filesystem::directory_iterator` 优雅地处理不存在的目录
问题描述
我有以下代码:
for (const auto& x : std::filesystem::directory_iterator(dir)) {
// do stuff with x
}
dir
可能不存在,我想将这种情况视为目录为空。我似乎想不出一个好的选择。
- 如果我用
try
/保护所有内容catch
,那么我也会捕获迭代代码异常,我不希望这样。 - 如果我向上移动
std::filesystem::directory_iterator
构造并用try
/保护它catch
,它会变得冗长,我将不得不重新抛出所有其他异常(它不会搞砸堆栈跟踪等吗?)。 - 如果我使用 的非抛出构造函数
directory_iterator
,我将不得不抛出std::error_code
其他错误。我不知道该怎么做。
解决方案
根据std::filesystem::directory_iterator
的文档,它同时具有默认构造函数和移动构造函数。所以:
std::filesystem::directory_iterator iter;
try {
iter=std::filesystem::directory_iterator{dir};
} catch(...)
{
// catch it
}
for (const auto& x : iter) {
// do stuff with x
}
推荐阅读
- excel - 返回代码(VBA)时,公共值不更新
- c++ - 从源文件编译 QOpenGLshader 时出错
- php - 我怎样才能只将我的 php 代码中的非重复数据保存到 txt 文件中?还是仅显示内容旋转中的非重复内容?
- javascript - 在移动设备上滚动会阻止 Vue.js 点击事件触发
- airflow - Slack SlackAPIPostOperator 在气流作曲家中无法正常工作
- c# - 从池中获取连接之前经过的超时时间
- airflow - BigQueryHook 的 Google Cloud Composer 身份验证
- django - 带有 Django 后端和谷歌身份验证的 Flutter 应用程序
- docker - docker中的haproxy零停机时间
- jbossfuse - 骆驼弹簧 xml 未加载到 fuse 7.x 中