C ++ directory_iterator

时间:2013-04-11 17:56:41

标签: c++ boost boost-filesystem

自从我使用C ++以来已经有一段时间了,请原谅我的新手问题。

我编写了以下代码来获取目录内容的列表,该工作正常:

for (directory_iterator end, dir("./");
     dir != end; dir++) {
    std::cout << *dir << std::endl;
}

“* dir”返回什么,指针是“char数组”,是指向“string”对象的指针,还是指向“path”对象的指针?

我想将“* dir”(如果以.cpp结尾)传递给另一个函数(),该函数将在稍后(异步)对其进行操作。我猜我需要复制“* dir”。我写了以下代码:

path *_path;
for (directory_iterator end, dir("./");
     dir != end; dir++) {
    _path = new path(*dir);
    if (_path->extension() == ".cpp") {
        function1(_path);    // function1() will free _path
    } else
        free(_path);
}

谢谢你, 艾哈迈德。

1 个答案:

答案 0 :(得分:4)

来自documentation of boost::directory_iterator

  

未定义end迭代器上的operator *的结果。任何   其他迭代器值为const directory_entry&amp;归还。

关于函数调用,我认为最简单的方法是:

using namespace boost::filesystem;

for (directory_iterator end, dir("./"); dir != end; dir++) {
  const boost::filesystem::path &this_path = dir->path();
  if (this_path.extension() == ".cpp") {
    function1(this_path); // Nothing to free
  } 
}

其中function1方法可以声明为:

void function1(const boost::filesystem::path this_path);