gpt4 book ai didi

c++ - recursive_directory_iterator 抛出异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:46 27 4
gpt4 key购买 nike

我正在使用 boost 迭代器“recursive_directory_iterator”递归扫描目录。但是,当迭代器运行到我的应用程序无权访问的目录时,会抛出“boost::filesystem3::filesystem_error”类型的异常,这会停止迭代器并且程序中止。无论如何我可以指示迭代器跳过这些目录。

我尝试了 Traversing a directory with boost::filesystem without throwing exceptions 中建议的代码但是,它对我也不起作用。我使用的是 boost 版本 1.49。

按照建议(我能想到的最好的)我的代码如下所示:

void scand()
{
boost::system::error_code ec, no_err;

// Read dir contents recurs
for (recursive_directory_iterator end, _path("/tmp", ec);
_path != end; _path.increment(ec)) {

if (ec != no_err) {
_path.pop();
continue;
}
cout << _path->path() << endl;
}
}

谢谢,艾哈迈德。

最佳答案

这是 boost::filesystem (V3) 中的一个已知错误:https://svn.boost.org/trac/boost/ticket/4494 .根据您的需要,您可以改用库的 V2(它甚至可能以 std::tr2::filesystem 的形式随编译器一起提供)。另一种选择是自己实现递归部分。

boost::system::error_code ec;
std::deque<boost::filesystem::path> directories {initialDir};
while(!directories.empty())
{
boost::filesystem::directory_iterator dit(directories.front(), ec);
directories.pop_front();
while(dit != boost::filesystem::directory_iterator())
{
if(boost::filesystem::is_directory(dit->path(), ec))
{
directories.push_back(dit->path());
}
HandleFile(dit->path()); // <-- do something with the file
++dit;
}
}

上面的代码只是为了给出一个大概的概念,缺少错误检查等。

关于c++ - recursive_directory_iterator 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16101121/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com