【问题标题】:How can I assign boost::filesystem::directory_entry::path() value to a string?如何将 boost::filesystem::directory_entry::path() 值分配给字符串?
【发布时间】:2016-02-03 11:56:16
【问题描述】:

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

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

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

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

在控制台上打印出路径效果很好,但我想不出一种方法来使用 path() 来做我想做的事,即将其值分配给一个字符串,然后将该字符串与我的正则表达式对象。

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

谁能指出我正确的方向?

谢谢。

编辑:

我很笨。

【问题讨论】:

  • 看看path::string()path::generic_string() from boost.org/doc/libs/1_47_0/libs/filesystem/v3/doc/… 。因此,在您的示例中,x.path().string() 将为您提供本机格式字符串
  • 谢谢,我们在正确的道路上,但我无法让 path().string() 循环。我已经编辑了我的问题以显示问题所在。
  • 在您的编辑中查看我的答案...

标签: c++ regex boost


【解决方案1】:

在控制台上打印路径效果很好,但我想不通 找到一种使用 path() 做我想做的事情的方法,那就是分配 它的值是一个字符串,然后将该字符串与我的正则表达式对象进行比较。

boost::path 有一个字符串成员,它要么执行到字符串类型的转换,要么返回对底层存储机制(通常为 std::string)的 const 引用(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 不会作为循环的一部分被调用,而只会在循环全部完成后调用......经典错误!!!

【讨论】:

  • 谢谢,我们在正确的道路上,但我无法让 path().string() 循环。我已经编辑了我的问题以显示问题所在。
  • 我不敢相信...谢谢。我在想 Python -.-
猜你喜欢
  • 2019-01-31
  • 2019-09-29
  • 2022-01-11
  • 2016-06-02
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
相关资源
最近更新 更多