【发布时间】:2021-07-29 09:39:25
【问题描述】:
我想使用std::filesystem::recursive_directory_iterator类创建一个类方法,遍历所有子目录并处理找到的xml文件。
我在互联网上找到的唯一方法是使用这样的 for 循环:
for (fs::directory_entry p : fs::recursive_directory_iterator("my_file"))
do_something(p);
问题是我需要在函数调用之间存储我的迭代器(或至少它指向的位置),因为我一次只能处理一个文件。我尝试这样实现它:
class C {
private:
std::filesystem::recursive_directory_iterator it;
std::filesystem::directory_entry p;
public:
C(std::filesystem::path);
std::string find_file();
};
C::C(std::filesystem::path path)
{
it = fs::recursive_directory_iterator(path);
p = fs::directory_entry(it.begin());
}
std::string C::find_file()
{
do { //using do while so my function won't load the same file twice
++p;
} while (!is_xml(p.path()) && p != it.end());
}
但是std::filesystem::recursive_directory_iterator好像没有begin()和end()方法,无法比较。
我不知道我的代码与工作范围循环有何不同,除了存储迭代器和有一个额外的条件。
【问题讨论】:
-
尝试开始(它),结束(它)
-
哦,nvm,我更改了 p 类型,它现在可以工作了,ty
标签: c++ c++17 boost-filesystem std-filesystem