【问题标题】:`std::filesystem::directory_iterator` graceful handling of non-existing dir`std::filesystem::directory_iterator` 优雅地处理不存在的目录
【发布时间】:2021-08-07 16:45:20
【问题描述】:

我有以下代码:

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 以解决其他错误。我不知道该怎么做。

【问题讨论】:

标签: c++ std-filesystem


【解决方案1】:

根据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
}

【讨论】:

    猜你喜欢
    • 2018-12-15
    • 2019-02-27
    • 2021-01-17
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多