如何将boost :: filesystem :: directory_entry :: path()值分配给字符串?

时间:2016-02-03 11:56:16

标签: c++ regex boost

我正在尝试编写一种递归遍历目录的算法,并将每个文件夹,子文件夹和文件名与用户定义的正则表达式对象进行比较。

我在迭代部分找到了这段代码:

path p(FilePath);
for (directory_entry& x : recursive_directory_iterator(p))
    std::cout << x.path() << '\n';

其中 Filepath 是用户在运行时定义的目录路径。

在控制台上打印出路径很有用,但是我无法找到一种方法来使用path()来做我想要的,这就是将它的值赋给一个字符串,然后将该字符串与我的正则表达式对象。

我一直在看boost :: filesystem :: directory_entry中的其他成员函数,但到目前为止我真的没有运气。

有人能指出我正确的方向吗?

感谢。

编辑:

我很蠢。

1 个答案:

答案 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 !!!