最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中std::ifstream的使用方法介紹

 更新時間:2024年06月13日 09:54:02   作者:賽先生.AI  
這篇文章主要給大家介紹了關(guān)于C++中std::ifstream使用方法的相關(guān)資料,std::ifstream 是輸入文件流類,用于從文件中讀取數(shù)據(jù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

1. 文件流

為了便于對文件的操作,C++標(biāo)準(zhǔn)庫中提供了文件輸入輸出流fstream,并提供了<fstream>頭文件。

fstream又細(xì)分了兩個分支,分別是處理輸入文件流的ifstream和處理輸出文件流的ofstream。

ifstream負(fù)責(zé)將文件從硬盤讀取至內(nèi)存中。

ofstream負(fù)責(zé)將文件從內(nèi)存寫入硬盤中。

這兩者所處理的文件流均包含二進(jìn)制文件(binary)和文本文件(text)。

接下來我們將針對輸入文件流ifstream用實(shí)際的例程介紹其使用方法。

2. 讀取文本

(1)按行讀取文本

#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::string line;
    std::ifstream file("example.txt"); // 打開文本文件
    if (file.is_open()) {
        while (getline(file, line)) { // 按行讀取
            std::cout << line << '\n';
        }
        file.close();
    } else {
        std::cout << "Unable to open file";
    }
    return 0;
}

(2)按字符讀取文本

#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::ifstream file("example.txt"); // 假設(shè)有一個名為example.txt的文件
    if (!file.is_open()) {
        std::cerr << "Error opening file" << std::endl;
        return 1;
    }
    char ch;
    while (file.get(ch)) { // 每次讀取一個字符,直到文件末尾
        std::cout << ch;
    }
    file.close(); // 關(guān)閉文件
    return 0;
}

(3)逐個字符串讀取文本

#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::ifstream file("example.txt");
    std::string word;
    /// 默認(rèn)會忽略輸入流中的空白字符,包括空格、制表符、換行符等
    while (file >> word) { // 按空白字符分隔讀取每個單詞
        std::cout << word << std::endl;
    }
    file.close();
    return 0;
}

(4)逐個數(shù)字讀取文本(適用于文本中存在某類型的數(shù)字)

#include <fstream>
#include <iostream>

int main() {
    std::ifstream file("numbers.txt");
    int number;
    /// 默認(rèn)會忽略輸入流中的空白字符,包括空格、制表符、換行符等
    while (file >> number) { // 從文件中讀取整數(shù)
        std::cout << number << std::endl;
    }
    file.close();
    return 0;
}

(5)讀取整個文件到字符串中

#include <fstream>
#include <sstream>
#include <iostream>
#include <string>

int main() {
    std::ifstream file("example.txt");
    std::stringstream buffer;
    buffer << file.rdbuf(); // 讀取整個文件內(nèi)容到buffer
    std::string contents = buffer.str(); // 將讀取的內(nèi)容轉(zhuǎn)換為字符串
    std::cout << contents;
    file.close();
    return 0;
}

3. 讀取二進(jìn)制

(1)讀取整個二進(jìn)制文件

#include <fstream>
#include <iostream>
#include <vector>

int main() {
    // 以二進(jìn)制模式打開文件
    std::ifstream file("example.bin", std::ios::binary | std::ios::ate); // std::ios::ate 定位到文件末尾,便于獲取文件大小
    if (file.is_open()) {
        // 獲取文件大小
        std::streamsize size = file.tellg();
        file.seekg(0, std::ios::beg); // 定位回文件開始
        // 分配內(nèi)存緩沖區(qū)
        std::vector<char> buffer(size);
        // 讀取文件到緩沖區(qū)
        if (file.read(buffer.data(), size)) {
            /* 成功讀取后的處理 */
        } else {
            std::cout << "Error reading file";
        }
        file.close();
    } else {
        std::cout << "Unable to open file";
    }
    return 0;
}

(2)分段讀取二進(jìn)制文件

#include <fstream>
#include <iostream>
#include <vector>

int main() {
    // 打開一個二進(jìn)制文件
    std::ifstream file("example.bin", std::ios::binary);
    if (!file) {
        std::cerr << "Unable to open file" << std::endl;
        return 1;
    }
    const size_t bufferSize = 1024; // 定義每次讀取的字節(jié)數(shù)
    char buffer[bufferSize]; // 創(chuàng)建一個緩沖區(qū)
    // 循環(huán)讀取文件,直到到達(dá)文件末尾
    while (!file.eof()) {
        file.read(buffer, bufferSize); // 嘗試讀取下一段數(shù)據(jù)
        std::streamsize bytes = file.gcount(); // 獲取實(shí)際讀取的字節(jié)數(shù)
        /// 處理讀取到的數(shù)據(jù)...
        /// 這里只是簡單地打印出實(shí)際讀取的字節(jié)數(shù)
        std::cout << "Read " << bytes << " bytes" << std::endl;
        /// 如果需要,可以對buffer中的數(shù)據(jù)進(jìn)行處理
        /// 判斷退出條件(此處可避免多讀一次)。
        if(file.peek() == EOF){
            break;
        }
    }
    file.close(); // 關(guān)閉文件
    return 0;
}

附:std::ifstream 和std::ofstream 的異同點(diǎn)

std::ifstream 和 std::ofstream 都是C++標(biāo)準(zhǔn)庫中的文件流類,用于進(jìn)行文件的輸入和輸出操作。

異同點(diǎn)如下:

相同點(diǎn):

都是用于文件操作的流類。

都需要通過文件路徑來創(chuàng)建文件流對象。

都可以使用相同的成員函數(shù)來進(jìn)行文件的讀寫操作。

不同點(diǎn):

std::ifstream 是輸入文件流類,用于從文件中讀取數(shù)據(jù)。

std::ofstream 是輸出文件流類,用于向文件中寫入數(shù)據(jù)。

std::ifstream 對象創(chuàng)建時需要指定文件路徑,并且只能進(jìn)行讀取操作。

std::ofstream 對象創(chuàng)建時需要指定文件路徑,并且只能進(jìn)行寫入操作。

std::ifstream 對象默認(rèn)以只讀方式打開文件,不能對文件進(jìn)行寫入操作。

std::ofstream 對象默認(rèn)以寫入方式打開文件,不能對文件進(jìn)行讀取操作。

std::ifstream 對象可以使用 >> 運(yùn)算符來從文件中讀取數(shù)據(jù)。

std::ofstream 對象可以使用 << 運(yùn)算符來將數(shù)據(jù)寫入文件。

總結(jié) 

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

相關(guān)文章

  • C語言數(shù)組超詳細(xì)講解中篇三子棋

    C語言數(shù)組超詳細(xì)講解中篇三子棋

    數(shù)組是一組有序的數(shù)據(jù)的集合,本篇將帶你結(jié)合數(shù)組來實(shí)現(xiàn)三子棋小游戲,上手實(shí)練更快的能夠掌握數(shù)組使用,感興趣的朋友來看看吧
    2022-04-04
  • C++中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式的方法

    C++中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式的方法

    這篇文章主要介紹了C++中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 使用?Visual?Studio?2022?開發(fā)?Linux?C++?應(yīng)用程序的過程詳解

    使用?Visual?Studio?2022?開發(fā)?Linux?C++?應(yīng)用程序的過程詳解

    Visual?Studio?2022?引入了用于?Linux?C++?開發(fā)的本機(jī)?WSL2?工具集,可以構(gòu)建和調(diào)試?Linux?C++?代碼,并提供了非常好的?Linux?文件系統(tǒng)性能、GUI?支持和完整的系統(tǒng)調(diào)用兼容性,這篇文章主要介紹了使用Visual?Studio?2022?開發(fā)?Linux?C++?應(yīng)用程序,需要的朋友可以參考下
    2021-11-11
  • C++共享智能指針shared_ptr的實(shí)現(xiàn)

    C++共享智能指針shared_ptr的實(shí)現(xiàn)

    在C++中沒有垃圾回收機(jī)制,必須自己釋放分配的內(nèi)存,否則就會造成內(nèi)存泄露,解決這個問題最有效的方法是使用智能指針,本文主要介紹了C++共享智能指針shared_ptr的實(shí)現(xiàn),感興趣的可以了解一下
    2023-12-12
  • Qt QThreadPool線程池的實(shí)現(xiàn)

    Qt QThreadPool線程池的實(shí)現(xiàn)

    QThreadPool管理和重新設(shè)計單個QThread對象,以幫助降低使用線程的程序中的線程創(chuàng)建成本,本文主要介紹了Qt QThreadPool線程池的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2007-03-03
  • Qt自定義控件實(shí)現(xiàn)儀表盤

    Qt自定義控件實(shí)現(xiàn)儀表盤

    這篇文章主要為大家詳細(xì)介紹了Qt如何自定義控件實(shí)現(xiàn)儀表盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C語言結(jié)構(gòu)體鏈表和指針實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    C語言結(jié)構(gòu)體鏈表和指針實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    這篇文章主要介紹了C語言結(jié)構(gòu)體鏈表和指針實(shí)現(xiàn)學(xué)生管理系統(tǒng),包括學(xué)生檔案管理子系統(tǒng)和學(xué)生成績管理子系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 關(guān)于在MFC中將窗口最小化到托盤實(shí)現(xiàn)原理及操作步驟

    關(guān)于在MFC中將窗口最小化到托盤實(shí)現(xiàn)原理及操作步驟

    最小化的原理:首先要將窗口隱藏,然后在右下角繪制圖標(biāo);恢復(fù)的原理:將窗口顯示,再將托盤中的圖片刪除,接下來介紹實(shí)現(xiàn)方法,感興趣的朋友可以了解下啊,希望本文對你有所幫助
    2013-01-01
  • OpenCV實(shí)現(xiàn)車牌字符分割(C++)

    OpenCV實(shí)現(xiàn)車牌字符分割(C++)

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)車牌字符分割,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C語言實(shí)現(xiàn)火車票管理系統(tǒng)

    C語言實(shí)現(xiàn)火車票管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)火車票管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論

仁化县| 喀喇沁旗| 永州市| 东阳市| 彰武县| 吉林市| 原平市| 社会| 翼城县| 彰化市| 霍邱县| 汤阴县| 当涂县| 凤阳县| 成安县| 越西县| 丹阳市| 固原市| 玉溪市| 抚顺市| 松潘县| 图们市| 盐津县| 连云港市| 伊吾县| 宝山区| 仲巴县| 五莲县| 新沂市| 恩平市| 乌鲁木齐市| 常德市| 调兵山市| 遂溪县| 宜君县| 定州市| 抚松县| 商水县| 吐鲁番市| 绥德县| 英吉沙县|