我正在尝试编写一种递归遍历目录的算法,并将每个文件夹,子文件夹和文件名与用户定义的正则表达式对象进行比较。
我在迭代部分找到了这段代码:
path p(FilePath);
for (directory_entry& x : recursive_directory_iterator(p))
std::cout << x.path() << '\n';
其中 Filepath 是用户在运行时定义的目录路径。
在控制台上打印出路径很有用,但是我无法找到一种方法来使用path()来做我想要的,这就是将它的值赋给一个字符串,然后将该字符串与我的正则表达式对象。
我一直在看boost :: filesystem :: directory_entry中的其他成员函数,但到目前为止我真的没有运气。
有人能指出我正确的方向吗?
感谢。
编辑:
我很蠢。
答案 0 :(得分:1)
在控制台上打印路径很有用,但我无法想象 一种方法来使用path()来做我想要的,这将是分配 它的值为一个字符串,然后将该字符串与我的正则表达式对象进行比较。
boost :: path有一个字符串成员,它可以执行到字符串类型的转换,或者返回对底层存储机制的const引用(通常是std :: string)(see boost path documentation)。因此,请致电:
x.path().string()
此外,您可能希望在for循环后面添加一些大括号:
path p(FilePath);
std::string temppath;
for (directory_entry& x : recursive_directory_iterator(p))
{
temppath = x.path().string();
std::cout << temppath << std::endl;
}
你构造代码的方式,std :: cout不会作为循环的一部分被调用,但只有在完整的循环完成之后...经典的bug !!!