C++ 三方库Boost_filesystem总结

Boost.Filesystem是Boost库的一部分,用于处理文件和目录。它提供path类来处理跨平台路径,支持创建、查询、删除文件和目录,以及目录迭代。关键函数包括文件状态检查、大小查询、时间戳获取、文件流操作等。此外,还支持目录迭代器遍历目录和递归删除功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

boost::filesystem总结

  • boost::filesystem是Boost C++
    Libraries中的一个模块,主要作用是处理文件(Files)和目录(Directories)。该模块提供的类boost::filesystem::path专门用来处理路径。而且,该模块中还有很多独立的函数能够用来执行创建目录、检查文件是否存在等任务。

一、创建Paths

定义路径时需要包含头文件boost/filesystem.hpp,并且使用命名空间boost::filesystem;

路径的创建很简单,仅仅需要向类boost::filesystem::path()的构造器传递一个string;

构造器的输入可以是一个没有意义的字符串,因为构造器不会去检测该路径是否是合法路径及是否存在;

path对象是一个跨平台的路径对象。

path对象的属性有下列这些:

       1) path.string()         输出字符串形式的路径

       2) path.stem()           文件名,不带扩展名

       3) path.extension()   	返回文件扩展名

二、文件和目录

该部分包括下列函数:
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()                                    如果没有参数传入,则返回当前工作目录;否则,则将传入的目录设为当前工作目录

三、目录迭代(Directory Iterators)

    boost::filesystem::directory_iterator()                          迭代目录下的所有文件

    boost::filesystem::recursive_directory_iterator()                递归地遍历一个目录和子目录,也就是迭代整个目录结构下的所有文件

四、文件流(File Streams)

头文件<fstream>定义的文件流不能将boost::filesystem::path定义的目录作为参数。如果非要使用path对象打开文件流的话,那就添加头文件<boost/filesystem/fstream.hpp>,如下:

#include <boost/filesystem/fstream.hpp>

#include <iostream>

using namespace boost::filesystem;

int main()

{

    path p{"test.txt"};

    ofstream ofs{p};

    ofs << "Hello, world!\n";

}
### 解决 BOOST_FILESYSTEM_LIB_DEBUG-NOTFOUND 错误 在处理 `BOOST_FILESYSTEM_LIB_DEBUG-NOTFOUND` 错误时,通常意味着 CMake 无法定位到 Boost 库中的文件系统库的调试版本。此问题可以通过多种方式解决。 #### 方法一:指定 Boost 路径 通过设置环境变量或直接在 `CMakeLists.txt` 中定义路径来帮助 CMake 正确识别所需的 Boost 组件及其位置。具体操作是在项目的 `CMakeLists.txt` 文件内加入以下指令: ```cmake set(BOOST_ROOT "C:/local/boost_1_78_0") # 替换为实际安装路径 set(BOOST_INCLUDEDIR "${BOOST_ROOT}/include") set(BOOST_LIBRARYDIR "${BOOST_ROOT}/lib64-msvc-14.2") # 或其他适用平台架构下的 lib 目录 ``` 上述命令告知 CMake 去哪里查找头文件以及静态链接库的位置[^1]。 #### 方法二:调整 FindBoost 设置 有时默认行为不足以满足需求,可以尝试自定义一些参数给 `find_package()` 函数调用来改进搜索逻辑: ```cmake set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) find_package(Boost REQUIRED COMPONENTS system filesystem thread date_time iostreams serialization) if(NOT Boost_FOUND) message(FATAL_ERROR "Failed to locate the necessary components of Boost.") endif() ``` 这里启用了多线程支持并禁用了静态运行时链接,同时请求特定组件列表以确保所有必需部分都被正确解析[^4]。 #### 方法三:更新 CMake 版本 如果遇到难以解释的行为差异,则可能是由于不同版本间内部实现的变化所致。对于某些情况而言,仅仅升级至较新的 CMake 发布版就能有效规避此类难题。例如有报告指出从较低版本升至3.22之后解决了找不到 Boost 子模块的问题[^5]。 #### 方法四:手动复制缺失项 作为最后手段,在开发环境中手工拷贝相应 `.dll` 和 `.lib` 到预期输出目录也是一种临时性的补救措施。不过这种方法治标不治本,并不适合长期维护的产品级代码。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值