【C++】boost::filesystem遍历文件目录

boost::filesystem是Boost C++ Libraries中的一个模块,主要作用是处理文件(Files)和目录(Directories)。
在c++中使用boost库遍历文件目录。

  • demo
// demo.cpp
#include <iostream>
#include <boost/filesystem.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>

using namespace std;
int main(){
    boost::filesystem::path path("/xx/xx/xx/xx/xx/xx");
    boost::filesystem::directory_iterator itr(path);
    while(itr != boost::filesystem::directory_iterator()) {
        // 判断该目录是文件夹,跳过
        if (boost::filesystem::is_directory(itr->path())) {
            itr++;
            continue;
        }
        std::string filePath = itr->path().string();
        std::cout << filePath << std::endl;

        std::string stem = itr->path().stem().string();        // 文件名
        std::string exten = itr->path().extension().string();   // 扩展名

        // 字符串切片
        std::vector<std::string> vStr;
        boost::split(vStr, filePath, boost::is_any_of("/"), boost::token_compress_on);
        std::string file = vStr[7];                          // 文件全名
        cout << file << '\t' << stem << '\t' << exten << endl;
        ++itr;
    }
    return 0;
}

  • 编译
    CMakeLists.txt中将Boost的filesystem模块和头文件找到,并链接到demo.cpp中
find_package(Boost REQUIRED COMPONENTS
        filesystem
        )
include_directories(${Boost_INCLUDE_DIRS})
add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
ADD_EXECUTABLE(demo demo.cpp)
TARGET_LINK_LIBRARIES(demo
        ${Boost_LIBRARIES}
        )
  • boost::filesystem接口总结
boost::filesystem::status(path)                                       查询文件或目录的状态,返回的是		boost::filesystem::file_status类型的对象
boost::filesystem::is_directory()                                    根据获取的状态判断是否是目录,返回bool
boost::filesystem::is_empty()                                        判断是否为空
boost::filesystem::is_regular_file()                                 根据获取的状态判断是否是普通文件,返回bool
boost::filesystem::is_symlink()                                      判断符号连接(在windows系统中,后缀为lnk的文件为连接文件)
boost::filesystem::exists()                                              判断是否存在
boost::filesystem::file_size()                                          返回文件的size,按bytes计算
boost::filesystem::last_write_time()                               返回文件最后一次修改的时间
boost::filesystem::space()                                              返回磁盘的总空间和剩余空间,
boost::filesystem::create_directory()                             创建目录
boost::filesystem::create_directories()                           递归创建整个目录结构
boost::filesystem::remove()                                           删除目录
boost::filesystem::remove_all()                                     递归删除整个目录结构
boost::filesystem::rename()                                           重命名目录
boost::filesystem::copy_file()                                         复制文件
boost::filesystem::copy_directory()                               复制目录
boost::filesystem::absolute()                                           获取文件或目录的绝对路径
boost::filesystem::current_path()                                   如果没有参数传入,则返回当前工作目录;否则,则将传入的目录设为当前工作目录
boost::filesystem::directory_iterator()                            迭代目录下的所有文件
boost::filesystem::recursive_directory_iterator()            递归地遍历一个目录和子目录,也就是迭代整个目录结构下的所有文件

详细参考:http://zh.highscore.de/cpp/boost/filesystem.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值