分享

C++17 filesystem 文件系统(详解)

 mscdj 2019-08-06

本文主要介绍C++17中的filesystem中的一些常用方法

一、C++17的支持

https://blog.csdn.net/qq_40946921/article/details/90645890

二、头文件及命名空间

  1. #include<filesystem>
  2. using namespace std::filesystem;

三、常用类:

    path 类:说白了该类只是对字符串(路径)进行一些处理,这也是文件系统的基石。

    directory_entry 类:功如其名,文件入口,这个类才真正接触文件。 

    directory_iterator 类:获取文件系统目录中文件的迭代器容器,其元素为 directory_entry对象(可用于遍历目录)

    file_status 类:用于获取和修改文件(或目录)的属性(需要了解C++11的强枚举类型(即枚举类))

四、使用方法

    1. 需要有一个path对象为基础,如果需要修改路径,可以调用其成员函数进行修改(注意其实只是处理字符串)。

     2.需要获取文件信息需要通过path构造directory_entry,但需要path一定存在才能调用构造,所以需要实现调用exists(path .)函数确保目录存在才能构造directory_entry(注意文件入口中的exists无法判断)。

     3.若需遍历,则可以使用 directory_iterator,进行遍历

   演示如下:

  1. #include <iostream>
  2. #include<filesystem>
  3. using namespace std;
  4. using namespace std::filesystem;
  5. int main(){
  6. path str("C:\\Windows");
  7. if (!exists(str)) //必须先检测目录是否存在才能使用文件入口.
  8. return 1;
  9. directory_entry entry(str); //文件入口
  10. if (entry.status().type() == file_type::directory) //这里用了C++11的强枚举类型
  11. cout << "该路径是一个目录" << endl;
  12. directory_iterator list(str); //文件入口容器
  13. for (auto& it:list)
  14. cout << it.path().filename()<< endl; //通过文件入口(it)获取path对象,再得到path对象的文件名,将之输出
  15. system("pause");
  16. return 0;
  17. }

五、常用库函数

void copy(const path& from, const path& to) :目录复制

path absolute(const path& pval, const path& base = current_path()) :获取相对于base的绝对路径

bool create_directory(const path& pval) :当目录不存在时创建目录

bool create_directories(const path& pval) :形如/a/b/c这样的,如果都不存在,创建目录结构

bool exists(const path& pval) :用于判断path是否存在

uintmax_t file_size(const path& pval) :返回目录的大小

file_time_type last_write_time(const path& pval) :返回目录最后修改日期的file_time_type对象

bool remove(const path& pval) :删除目录

uintmax_t remove_all(const path& pval) :递归删除目录下所有文件,返回被成功删除的文件个数

void rename(const path& from, const path& to) :目录重命名

六、类图

   

未完...

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多