boost directory_iterator 示例 - 如何不递归地列出目录文件 [英] boost directory_iterator example - how to list directory files not recursive

查看:29
本文介绍了boost directory_iterator 示例 - 如何不递归地列出目录文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我应该如何使用 directory_iterator 来列出目录文件(非递归)?

How should I use directory_iterator to list directory files (not recursive)?

此外,我应该添加/链接哪些头文件/库或我应该进行其他设置?我在我的项目中使用了 boost,但由于某种原因 directory_iterator 是underclared identifier",而我可以使用其他 boost 功能.

Also what header files / libs should I add/link or other settings I should make? I'm using boost in my project but by some reason directory_iterator is "underclared identifier" while I can use other boost features.

更新

另一种解决方案:

#include <filesystem>
#include <boost/filesystem.hpp>
#include <iostream>

using namespace boost::filesystem;

for (directory_iterator itr(path_ss); itr!=directory_iterator(); ++itr)
{
    cout << itr->path().filename() << ' '; // display filename only
    if (is_regular_file(itr->status())) cout << " [" << file_size(itr->path()) << ']';
    cout << '
';
}

推荐答案

tut3 示例 就是您要查找的内容:

The tut3 example is what you're looking for:

查看在 Coliru 上直播

See it Live on Coliru

这是一个基于 c++11 的简化版本:

Here's a simplified version based on c++11:

生活在 Coliru

#include <boost/filesystem.hpp>
#include <boost/range/iterator_range.hpp>
#include <iostream>

using namespace boost::filesystem;

int main(int argc, char *argv[]) {
    path p(argc>1? argv[1] : ".");

    if(is_directory(p)) {
        std::cout << p << " is a directory containing:
";

        for(auto& entry : boost::make_iterator_range(directory_iterator(p), {}))
            std::cout << entry << "
";
    }
}

你可以看到我链接了 boost_system(用于错误代码工具)和 boost_filesystem:

You can see I linked boost_system (for the errorcode facilities) and boost_filesystem:

g++ -std=c++11 -Os -Wall -pedantic main.cpp -lboost_system -lboost_filesystem && ./a.out .
"." is a directory containing:
"./main.cpp"
"./a.out"

这篇关于boost directory_iterator 示例 - 如何不递归地列出目录文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆