如何只搜索文件夹(使用boost迭代目录时)?

时间:2014-08-07 19:54:37

标签: c++ boost iterator directory

如何只搜索文件夹(使用boost迭代目录时)?如何过滤结果以仅获取文件夹?

我已尝试过这些名称,但文件夹可以奇怪地命名,看起来好像有扩展名,我必须处理它,因为我正在努力搜索一个非常大且非常混乱的目录(我不允许只需清理它,它必须按原样搜索和过滤......)

由于

1 个答案:

答案 0 :(得分:0)

问题不包括已经尝试过的内容,所以如果还没有完成,那么以下内容肯定会有所帮助:

http://www.boost.org/doc/libs/1_49_0/libs/filesystem/v3/doc/tutorial.html#Directory-iteration

目录迭代加上捕获异常 - (tut3.cpp)

Boost.Filesystem的directory_iterator类正是我们在这里需要的。它遵循标准库的istream_iterator的一般模式。它从路径构造,迭代目录的内容。默认构造的directory_iterator充当结束迭代器。

directory_iterator的值类型是directory_entry。 directory_entry对象包含path和file_status信息。 directory_entry对象可以直接使用,但也可以在函数调用中传递给路径参数。

另一个需求是在面对可能影响文件系统操作的多种错误时增强稳健性。我们可以在每次调用Boost.Filesystem函数的级别上执行此操作(请参阅错误报告),但更容易提供整体try / catch块。

tut3.cpp

int main(int argc, char* argv[])
{
  path p (argv[1]);   // p reads clearer than argv[1] in the following code

  try
  {
    if (exists(p))    // does p actually exist?
    {
      if (is_regular_file(p))        // is p a regular file?   
        cout << p << " size is " << file_size(p) << '\n';

      else if (is_directory(p))      // is p a directory?
      {
        cout << p << " is a directory containing:\n";

        copy(directory_iterator(p), directory_iterator(), // directory_iterator::value_type
          ostream_iterator<directory_entry>(cout, "\n")); // is directory_entry, which is
                                                          // converted to a path by the
                                                          // path stream inserter
      }

      else
        cout << p << " exists, but is neither a regular file nor a directory\n";
    }
    else
      cout << p << " does not exist\n";
  }

  catch (const filesystem_error& ex)
  {
    cout << ex.what() << '\n';
  }

  return 0;
}