「C/C++」C++17 之 std::filesystem 文件系统

在这里插入图片描述
在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「C/C++」C/C++程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明

std::filesystem:C++17中的文件系统操作库

在这里插入图片描述

引言

在C++17中,标准库引入了一个重要的新特性——std::filesystem。这个库提供了一系列用于文件系统操作的功能,大大简化了与文件系统相关的编程任务。本文旨在向新手介绍std::filesystem的作用、使用方法以及注意事项,帮助大家快速上手这一强大的工具。

作用

std::filesystem库主要用于处理文件和目录的操作,包括但不限于:

  • 路径操作:如拼接、解析、检查路径格式等。
  • 创建和删除文件夹:使用create_directoryremoveremove_all等函数。
  • 检查文件或文件夹的存在和状态:如existsis_directoryis_regular_file等。
  • 查询文件大小:使用file_size函数。
  • 文件复制和移动:如copycopy_filemoverename等函数。
  • 遍历目录:使用directory_iteratorrecursive_directory_iterator
  • 获取和设置文件权限:使用permissions函数。
  • 读取最后一次修改时间:使用last_write_time函数。

里面的类

在这里插入图片描述

使用方法

  1. 包含头文件

    要使用std::filesystem库,首先需要包含<filesystem>头文件。

    #include <filesystem>
    namespace fs = std::filesystem;
    
  2. 路径操作

    std::filesystem::path类用于表示文件系统路径,并提供了许多操作符和函数来处理路径。

    fs::path p1("/mnt/c/Users/Administrator/Desktop");
    fs::path p2 = p1 / "papers" / "test.txt"; // 使用 / 来拼接路径
    std::cout << "New path: " << p2 << std::endl;
    
  3. 检查文件或文件夹的存在

    使用exists函数可以检查文件或文件夹是否存在。

    fs::path filePath = p2;
    if (fs::exists(filePath)) {
        std::cout << "File exists." << std::endl;
    } else {
        std::cout << "File does not exist." << std::endl;
    }
    
  4. 创建和删除文件夹

    使用create_directory函数可以创建文件夹,使用removeremove_all函数可以删除文件夹或文件。

    fs::path dirPath = p1 / "new_folder";
    if (!fs::exists(dirPath)) {
        fs::create_directory(dirPath);
        std::cout << "Directory created." << std::endl;
    }
    fs::remove_all(dirPath); // 删除文件夹及其内容
    
  5. 遍历目录

    使用directory_iteratorrecursive_directory_iterator可以遍历目录中的条目。

    for (const auto& entry : fs::directory_iterator(p1)) {
        std::cout << entry.path() << std::endl;
    }
    
  6. 文件复制和移动

    使用copymove函数可以复制或移动文件。

    fs::path sourceFile = p2;
    fs::path destFile = p1 / "copied_test.txt";
    fs::copy(sourceFile, destFile);
    

注意事项

  1. 权限检查

    在进行文件系统操作时,需要确保程序有足够的权限来访问目标文件或文件夹。否则,可能会导致权限被拒绝的错误。

  2. 错误处理

    std::filesystem中的许多函数都会抛出std::filesystem::filesystem_error异常,用于错误处理。因此,在使用这些函数时,最好使用try-catch块来捕获并处理异常。

  3. 跨平台性

    尽管std::filesystem提供了一个高级和跨平台的接口,使得文件系统操作更加容易和一致,但其实现细节依赖于操作系统的特定特性和系统调用。因此,在不同平台(如Linux、Windows)之间可能会有所不同。

  4. 文件编码

    std::filesystem库专注于文件系统的操作,如路径处理、文件的创建和删除、目录遍历等,而不涉及文件内容的具体编码。如果需要处理文件编码,可能需要使用第三方库,如ICU(International Components for Unicode)或Boost的字符串转换功能。

总结

std::filesystem是C++17中引入的一个重要特性,它提供了一系列用于文件系统操作的功能,大大简化了与文件系统相关的编程任务。通过本文的介绍,相信新手已经对std::filesystem有了初步的了解,并能够掌握其基本的使用方法。在实际开发中,可以根据需要灵活运用这些功能来处理文件和目录的操作。同时,也需要注意权限检查、错误处理以及跨平台性等注意事项,以确保程序的稳定性和可靠性。


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何曾参静谧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值