2016-02-03 49 views
1

我想写一个迭代递归通过一个目录,并将每个文件夹,子文件夹和文件名与用户定义的正则表达式对象进行比较的算法。如何将boost :: filesystem :: directory_entry :: path()值分配给字符串?

我发现这段代码的重复部分:

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

文件路径是在运行时由用户定义的目录路径。

它很适合在控制台上打印出路径,但我找不出一种方法来使用path()来做我想做的事情,也就是将它的值赋给一个字符串,然后比较那个字符串到我的正则表达式对象。

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

任何人都可以指向正确的方向吗?

谢谢。

编辑:

我很笨。

+2

请从http://www.boost.org/doc/libs/1_47_0/libs/filesystem/v3/doc/reference查看'path :: string()'或'path :: generic_string()' .html#path-native-format-observers。所以在你的例子中,'x.path()。string()'会给你本地格式字符串 –

+0

谢谢,我们在正确的路径上,但是我不能让path()。string()来循环。我编辑了我的问题以显示问题所在。 –

+0

看到我的回答与你的编辑... –

回答

1

它的伟大工程,打印出的路径在控制台上,但我不 出了一种利用路径()做我想要的东西,这将是分配 其值设置为一个字符串,然后将该字符串与我的正则表达式对象进行比较。

升压::路径已得到,要么执行转换为字符串类型,或返回一个常量引用到下面的储存机构(典型的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; 
} 

你构造方式的代码,标准::法院就不能称其为部分的循环,但只有在完整的循环后...经典错误!

+0

谢谢,我们在正确的道路上,但我不能得到path()。string()来循环。我编辑了我的问题以显示问题所在。 –

+0

你的大括号在哪里?对于(){}??? –

+0

我不敢相信...谢谢。我在想Python- .- –

相关问题