C++17 filesystem 文件系統(詳解)


C++17 filesystem 文件系統(詳解)

  2019-06-10 21:04:15

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

 

本文主要介紹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) :移動文件或者重命名

六、類圖

   

未完...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM