亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c++ fielsystem庫的具體使用

 更新時間:2025年07月14日 09:41:54   作者:NurDroid  
C++17引入了fielsystem庫,它提供了一組用于操作文件和路徑的工具,這個庫極大地簡化了文件和目錄的管理,使得在不同操作系統(tǒng)上進行文件操作更加方便和統(tǒng)一,感興趣的可以了解一下

C++17 引入了 <filesystem> 庫,它提供了一組用于操作文件和路徑的工具。這個庫極大地簡化了文件和目錄的管理,使得在不同操作系統(tǒng)上進行文件操作更加方便和統(tǒng)一。以下是對 <filesystem> 庫的詳細介紹,包括其主要概念和函數(shù)。

1.引入頭文件

在使用 <filesystem> 庫之前,需要包含相應(yīng)的頭文件:

#include <filesystem>

命名空間為 std::filesystem,通??梢酝ㄟ^ using namespace std::filesystem; 來簡化代碼。

2.路徑(Path)

路徑是 <filesystem> 庫的核心概念之一,表示文件或目錄的位置。路徑可以是絕對路徑或相對路徑。

創(chuàng)建路徑

path p = "example.txt"; // 相對路徑
path q = "/home/user/example.txt"; // 絕對路徑

路徑操作

拼接路徑:使用 / 運算符或 concat 函數(shù)。

path p = "folder";
path q = p / "file.txt"; // folder/file.txt

獲取路徑信息

path p = "/home/user/example.txt";
cout << p.filename() << endl; // example.txt
cout << p.parent_path() << endl; // /home/user
cout << p.extension() << endl; // .txt
cout << p.stem() << endl; // example
  • p.string():將路徑轉(zhuǎn)換為字符串。
  • p.c_str():獲取路徑的 C 風(fēng)格字符串。
  • p.filename():獲取路徑的最后一部分(文件名或目錄名)。
  • p.parent_path():獲取路徑的父目錄。
  • p.extension():獲取文件的擴展名。
  • p.stem():獲取文件名去掉擴展名的部分。

3.文件操作

檢查文件狀態(tài)

  • exists(path):檢查路徑是否存在。
    if (exists("example.txt")) {
        cout << "File exists" << endl;
    }
    
  • is_regular_file(path):檢查路徑是否指向普通文件。
  • is_directory(path):檢查路徑是否指向目錄。
  • is_symlink(path):檢查路徑是否為符號鏈接。
  • file_size(path):獲取文件大?。ㄒ宰止?jié)為單位)。
    if (is_regular_file("example.txt")) {
        cout << "File size: " << file_size("example.txt") << " bytes" << endl;
    }
    

創(chuàng)建和刪除文件

  • create_directory(path):創(chuàng)建一個目錄。
  • create_directories(path):創(chuàng)建多級目錄。
  • remove(path):刪除文件或目錄。
    create_directory("testdir");
    create_directories("testdir/subdir");
    remove("testdir/subdir");
    remove("testdir");
    

復(fù)制和移動文件

  • copy_file(from, to):復(fù)制文件。
  • rename(from, to):重命名或移動文件。
    copy_file("source.txt", "destination.txt");
    rename("oldname.txt", "newname.txt");
    

4.目錄操作

遍歷目錄

directory_iterator:用于遍歷目錄中的文件和子目錄。

for (const auto& entry : directory_iterator("testdir")) {
    cout << entry.path() << endl;
}

獲取目錄內(nèi)容

  • directory_iterator 提供了多種成員函數(shù):
    • path():獲取路徑。
    • is_directory():判斷是否為目錄。
    • is_regular_file():判斷是否為普通文件。
    for (const auto& entry : directory_iterator("testdir")) {
        if (entry.is_directory()) {
            cout << entry.path() << " is a directory" << endl;
        } else if (entry.is_regular_file()) {
            cout << entry.path() << " is a file" << endl;
        }
    }
    

5.文件狀態(tài)和權(quán)限

獲取文件狀態(tài)

  • status(path):獲取文件的狀態(tài)。
  • permissions(path):獲取文件的權(quán)限。
    file_status status = status("example.txt");
    if (status.permissions() == perms::owner_read) {
        cout << "File is readable by owner" << endl;
    }
    

修改文件權(quán)限

  • permissions(path, perms):修改文件權(quán)限。
    permissions("example.txt", perms::owner_read | perms::owner_write);
    

6.文件流與文件系統(tǒng)

<filesystem> 庫與 C++ 的文件流(如 ifstreamofstream)可以無縫配合??梢灾苯訉?path 對象傳遞給文件流構(gòu)造函數(shù):

ifstream in("example.txt");
ofstream out("output.txt");

7.錯誤處理

<filesystem> 庫使用異常機制處理錯誤。如果操作失敗,會拋出 filesystem_error 異常??梢酝ㄟ^ try-catch 塊捕獲并處理這些異常:

try {
    remove("nonexistent_file.txt");
} catch (const filesystem_error& e) {
    cerr << e.what() << endl;
}

8.示例代碼

以下是一個綜合示例,展示了 <filesystem> 庫的多種功能:

#include <iostream>
#include <filesystem>
using namespace std;
using namespace std::filesystem;

int main() {
    path p = "example.txt";
    if (!exists(p)) {
        ofstream out(p);
        out << "Hello, Filesystem!" << endl;
        out.close();
    }

    cout << "File size: " << file_size(p) << " bytes" << endl;

    path dir = "testdir";
    create_directory(dir);

    for (const auto& entry : directory_iterator(dir.parent_path())) {
        if (entry.is_directory()) {
            cout << entry.path() << " is a directory" << endl;
        }
    }

    copy_file(p, dir / p.filename());
    remove(p);

    return 0;
}

9.總結(jié)

<filesystem> 庫為 C++ 提供了一種現(xiàn)代且跨平臺的方式來操作文件和目錄。它簡化了許多復(fù)雜的文件操作任務(wù),并且與 C++ 的其他標準庫無縫集成。通過掌握路徑操作、文件操作、目錄操作以及錯誤處理等核心功能,可以高效地處理文件和目錄相關(guān)的任務(wù)。

到此這篇關(guān)于c++ fielsystem庫的具體使用的文章就介紹到這了,更多相關(guān)c++ fielsystem庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C++編程中運算符的使用

    詳解C++編程中運算符的使用

    這篇文章主要介紹了詳解C++編程中運算符的使用,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • Qt將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出為html

    Qt將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出為html

    這篇文章主要為大家詳細介紹了Qt如何實現(xiàn)將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出為html,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • C++智能指針weak_ptr的作用詳解

    C++智能指針weak_ptr的作用詳解

    weak_ptr是一個智能指針,也是一個類模板,本文主要介紹了C++智能指針weak_ptr的作用詳解,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • 淺析C語言中堆和棧的區(qū)別

    淺析C語言中堆和棧的區(qū)別

    堆和棧都是一種數(shù)據(jù)項按序排列的數(shù)據(jù)結(jié)構(gòu)。在C語言中是非常重要的知識點,接下來通過本文給大家介紹C語言中堆和棧的區(qū)別,感興趣的朋友一起看下吧
    2016-06-06
  • C語言中結(jié)構(gòu)體實例解析

    C語言中結(jié)構(gòu)體實例解析

    大家好,本篇文章主要講的是C語言中結(jié)構(gòu)體實例解析,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • kernel劫持modprobe?path內(nèi)容詳解

    kernel劫持modprobe?path內(nèi)容詳解

    這篇文章主要為大家介紹了kernel劫持modprobe?path的內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • OpenGL實現(xiàn)邊緣填充算法

    OpenGL實現(xiàn)邊緣填充算法

    這篇文章主要為大家詳細介紹了OpenGL實現(xiàn)邊緣填充算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C++前綴和及用法示例詳解

    C++前綴和及用法示例詳解

    前綴和算法的基本思想是利用動態(tài)規(guī)劃的思想,通過累加計算出每一個位置的前綴和,具體實現(xiàn)時,可以對原始數(shù)組進行一次遍歷,累加計算出前綴和數(shù)組的每一個元素,這篇文章主要介紹了C++前綴和的相關(guān)知識,需要的朋友可以參考下
    2025-03-03
  • C/C++的內(nèi)存管理你了解嘛

    C/C++的內(nèi)存管理你了解嘛

    這篇文章主要為大家介紹了C/C++的內(nèi)存管理,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 利用Matlab繪制好看的旋轉(zhuǎn)九邊形

    利用Matlab繪制好看的旋轉(zhuǎn)九邊形

    這篇文章主要為大家介紹了如何利用Matlab繪制超好看的旋轉(zhuǎn)九邊形。文中的示例代碼講解詳細,對我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下
    2022-03-03

最新評論