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() 递归地遍历一个目录和子目录,也就是迭代整个目录结构下的所有文件