编辑:我正在使用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返回的缩写文件中获取完整的文件路径?
答案 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;
}