filesystem directory_iterator未返回完整文件路径

时间:2013-08-09 13:11:04

标签: c++

编辑:我正在使用std :: tr2 :: sys而不是boost的filesytem

我正在开发一个简单的应用程序,用于扫描计算机上的目录并返回有关这些文件的统计信息。可以通过两种方式调用扫描:递归和非递归。路径被传递到扫描方法以及是否应该递归地执行扫描的标志。鉴于path folder这两个实现看起来像这样:

directory_iterator start( folder ), end;
for( ; start != end; ++start ) {
    //Some code in here
    // get the path like this:
    auto path = start->path();
}

recursive_directory_iterator start( folder ), end;
for( ; start != end; ++start ) {
    //Some code in here
    // get the path like this:
    auto path = start->path();
}

我遇到的问题是,在我尝试抓取路径时使用常规directory_iterator的块中,它只返回文件名即。 “myTextFile.txt”,从recursive_directory_iterator获取它返回系统上文件的完整路径。在每种情况下,文件夹的值都相同(也是完整的文件路径)。是否有理由将路径的前部切断,或者是否有某种方法可以从我从directory_iterator返回的缩写文件中获取完整的文件路径?

2 个答案:

答案 0 :(得分:2)

要获得完整路径,您需要使用start->path().directory_string()

directory_iterator end;
for (directory_iterator start(p);
      start != end;
      ++start)
{
    if (is_directory(start->status()))
    {
      //A directory
    }
    if (is_regular_file(start->status()))
    {   
      std::cout << start->path().directory_string()<< "\n";
    }
}

根据您的需要使用以下内容,请参阅提升文档以获取更多详细信息,但请将其建议全部命名。

start->path().branch_path();
start->path().directory_string();
start->path().file_string();
start->path().root_path();
start->path().parent_path();
start->path().string();
start->path().basename();
start->path().filename();
start->path().root_name();
start->path().relative_path();

答案 1 :(得分:1)

使用complete功能:

auto full_path = std::tr2::sys::complete(path, folder);

另一种简单的方法是简单地将文件名附加到路径上(在MSVC2012上使用<filesystem>命名空间中的std::tr2::sys进行测试):

for (; start != end; ++start) {
    auto path = start->path();
    auto full_path = folder / path;
}