C++ 文件系统目录\u迭代器未返回完整文件路径

C++ 文件系统目录\u迭代器未返回完整文件路径,c++,C++,编辑:我使用的是std::tr2::sys而不是boost的文件系统 我正在开发一个简单的应用程序,它可以扫描计算机上的目录并返回有关这些文件的统计信息。有两种方式可以调用scan:递归和非递归。一个路径与一个标志一起被传递到scan方法中,该标志指示是否应该递归地进行扫描。给定path文件夹,这两个实现看起来像这样: directory_iterator start( folder ), end; for( ; start != end; ++start ) { //Some code

编辑:我使用的是std::tr2::sys而不是boost的文件系统

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

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


我遇到的问题是,在使用常规目录迭代器的块中,当我尝试获取路径时,它将只返回文件名,即“myTextFile.txt”,其中从递归目录迭代器获取它将返回系统上文件的完整路径。在每种情况下,folder的值都是相同的(也是完整的文件路径)。路径的前面部分被截断是有原因的吗?还是有某种方法可以从我从目录迭代器返回的缩写路径中获取完整的文件路径?

对于完整路径,您需要使用
开始->路径().directory\u string()

使用以下功能:

auto full_path = std::tr2::sys::complete(path, folder);
另一种简单的方法是简单地将文件名附加到路径(在MSVC2012上使用
std::tr2::sys
命名空间中的
进行测试):


这不起作用,我尝试使用directory_string,但它仍然只是返回文件名,前面没有任何路径it@JesseCarter:有趣的是,
boost::filesystem
使用
start->path()提供完整路径,但microsoft的实现没有。
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();
auto full_path = std::tr2::sys::complete(path, folder);
for (; start != end; ++start) {
    auto path = start->path();
    auto full_path = folder / path;
}