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

C++實現(xiàn)文本與二進制文件讀寫操作的示例

 更新時間:2026年01月07日 10:11:23   作者:司徒軒宇  
在C++開發(fā)中,文件操作是必備技能之一,本文將全面解析C++文件讀寫的操作方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在C++開發(fā)中,文件操作是必備技能之一。本文將全面解析C++文件讀寫的核心概念、操作方法和最佳實踐,包含豐富的代碼示例。

一、文件操作核心類

C++通過<fstream>頭文件提供三種核心類:

類名功能描述繼承關(guān)系
ofstream文件輸出流(寫操作)繼承自ostream
ifstream文件輸入流(讀操作)繼承自istream
fstream文件輸入輸出流(讀寫操作)繼承自iostream

二、文本文件操作

1. 寫入文本文件

#include <fstream>
#include <string>

int main() {
    // 創(chuàng)建輸出流(默認覆蓋模式)
    std::ofstream outFile("data.txt");
    
    if (!outFile) {
        std::cerr << "文件創(chuàng)建失??!" << std::endl;
        return 1;
    }
    
    // 寫入不同類型數(shù)據(jù)
    outFile << "用戶日志\n";
    outFile << "ID: " << 1001 << "\n";
    outFile << "余額: $" << 2450.75 << "\n";
    
    // 自動關(guān)閉文件(RAII)
    return 0;
}

2. 讀取文本文件

#include <fstream>
#include <iostream>

int main() {
    std::ifstream inFile("data.txt");
    
    if (!inFile.is_open()) {
        std::cerr << "文件打開失?。? << std::endl;
        return 1;
    }
    
    // 逐行讀取
    std::string line;
    while (std::getline(inFile, line)) {
        std::cout << line << std::endl;
    }
    
    // 重置讀取位置
    inFile.clear();
    inFile.seekg(0);
    
    // 格式化讀取
    int id;
    double balance;
    inFile.ignore(100, ':');  // 跳過"ID: "
    inFile >> id;
    inFile.ignore(100, '$'); // 跳過"余額: $"
    inFile >> balance;
    
    std::cout << "\n解析結(jié)果: ID=" << id 
              << ", 余額=" << balance << std::endl;
    
    return 0;
}

三、二進制文件操作

1. 寫入二進制數(shù)據(jù)

#include <fstream>

struct UserData {
    int id;
    double balance;
    char name[32];
};

int main() {
    UserData user = {1001, 2450.75, "張三"};
    
    std::ofstream binFile("user.dat", std::ios::binary);
    binFile.write(reinterpret_cast<char*>(&user), sizeof(user));
    
    return 0;
}

2. 讀取二進制數(shù)據(jù)

#include <fstream>
#include <iostream>

int main() {
    std::ifstream binFile("user.dat", std::ios::binary);
    
    if (!binFile) {
        std::cerr << "二進制文件打開失?。? << std::endl;
        return 1;
    }
    
    UserData user;
    binFile.read(reinterpret_cast<char*>(&user), sizeof(user));
    
    std::cout << "用戶ID: " << user.id << "\n"
              << "姓名: " << user.name << "\n"
              << "余額: " << user.balance << std::endl;
    
    return 0;
}

四、文件打開模式詳解

通過位或運算符組合多種模式:

模式標志描述
std::ios::in讀模式(默認ifstream)
std::ios::out寫模式(默認ofstream)
std::ios::app追加模式(不覆蓋原有內(nèi)容)
std::ios::ate打開后定位到文件末尾
std::ios::trunc清空文件(默認)
std::ios::binary二進制模式
// 示例:以追加模式寫入文本
std::ofstream logFile("app.log", 
                     std::ios::out | std::ios::app);
                     
// 示例:讀寫二進制文件(不截斷)
std::fstream dataFile("records.dat",
                     std::ios::binary |
                     std::ios::in | 
                     std::ios::out);

五、錯誤處理機制

健壯的文件操作必須包含錯誤處理:

std::fstream file("critical.dat");

// 檢查文件狀態(tài)
if (file.fail()) {
    std::cerr << "文件操作失敗!" << std::endl;
}

// 詳細錯誤診斷
if (!file) {
    if (file.bad()) {
        std::cerr << "不可恢復(fù)的錯誤" << std::endl;
    } else if (file.eof()) {
        std::cerr << "到達文件末尾" << std::endl;
    } else if (file.fail()) {
        std::cerr << "非致命錯誤(如格式錯誤)" << std::endl;
    }
}

六、最佳實踐與性能優(yōu)化

1. RAII管理資源

{
    std::ofstream tmpFile("temp.txt");
    // 文件在作用域結(jié)束時自動關(guān)閉
}

2. 高效文件復(fù)制

bool copyFile(const std::string& src, const std::string& dst) {
    std::ifstream in(src, std::ios::binary);
    std::ofstream out(dst, std::ios::binary);
    
    if (!in || !out) return false;
    
    const size_t BUFFER_SIZE = 4096;
    char buffer[BUFFER_SIZE];
    
    while (in.read(buffer, BUFFER_SIZE)) {
        out.write(buffer, BUFFER_SIZE);
    }
    out.write(buffer, in.gcount());  // 寫入剩余字節(jié)
    
    return true;
}

3. C++17文件系統(tǒng)操作

#include <filesystem>
namespace fs = std::filesystem;

// 檢查文件存在
if (fs::exists("data.txt")) {
    // 獲取文件大小
    auto size = fs::file_size("data.txt");
    // 重命名文件
    fs::rename("old.txt", "new.txt");
}

七、應(yīng)用案例:日志系統(tǒng)

class Logger {
public:
    Logger(const std::string& filename) 
        : logFile(filename, std::ios::app) {}
    
    ~Logger() { if (logFile) logFile.close(); }
    
    void log(const std::string& message) {
        if (!logFile) return;
        
        auto now = std::chrono::system_clock::now();
        auto time = std::chrono::system_clock::to_time_t(now);
        logFile << std::put_time(std::localtime(&time), "%F %T")
                << " | " << message << "\n";
    }
    
private:
    std::ofstream logFile;
};

// 使用示例
Logger logger("app.log");
logger.log("系統(tǒng)啟動");
logger.log("用戶登錄: ID=1001");

到此這篇關(guān)于C++實現(xiàn)文本與二進制文件讀寫操作的示例的文章就介紹到這了,更多相關(guān)C++ 文本與二進制文件讀寫操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何將C語言代碼轉(zhuǎn)換為應(yīng)用程序(也就是編譯)

    如何將C語言代碼轉(zhuǎn)換為應(yīng)用程序(也就是編譯)

    有時候我們將讓我們的c語言代碼保存為一個exe方便,方便使用,實際就是我們俗說的編譯
    2013-07-07
  • C++中的關(guān)鍵字volatile詳解

    C++中的關(guān)鍵字volatile詳解

    這篇文章主要介紹了C++中的關(guān)鍵字volatile使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 詳解C++ 多態(tài)的實現(xiàn)及原理

    詳解C++ 多態(tài)的實現(xiàn)及原理

    這篇文章主要介紹了C++ 多態(tài)的實現(xiàn)及原理,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • C/C++中extern函數(shù)使用詳解

    C/C++中extern函數(shù)使用詳解

    extern可以置于變量或者函數(shù)前,以標示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時在其他模塊中尋找其定義。此外extern也可用來進行鏈接指定
    2022-09-09
  • codeblocks安裝及使用超詳細圖文教程

    codeblocks安裝及使用超詳細圖文教程

    這篇文章主要介紹了codeblocks安裝及使用教程詳解,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • C語言實現(xiàn)飛機小游戲

    C語言實現(xiàn)飛機小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)飛機小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語言中#if的使用詳解

    C語言中#if的使用詳解

    #if和#endif是一組同時使用的,叫做條件編譯指令。#if與#define、#include等指令一樣是由預(yù)處理器這個強大的工具處理的,預(yù)處理器可以在編譯前處理c程序,這篇文章主要介紹了C語言中#if的使用,需要的朋友可以參考下
    2022-11-11
  • 基于Qt實現(xiàn)簡易GIF播放器的示例代碼

    基于Qt實現(xiàn)簡易GIF播放器的示例代碼

    這篇文章主要介紹了如何利用Qt設(shè)計一個簡易GIF播放器,可以播放GIF動畫。其基本功能有載入文件、播放、暫停、停止、快進和快退,感興趣的可以了解一下
    2022-06-06
  • 指針與const限定符的使用分析

    指針與const限定符的使用分析

    本篇文章對指針與const限定符的使用進行了分析介紹。需要的朋友參考下
    2013-05-05
  • C++ Qt之halcon讀取像素項目過程詳解

    C++ Qt之halcon讀取像素項目過程詳解

    這篇文章主要介紹了C++ Qt之halcon讀取像素項目過程詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09

最新評論

柳州市| 长岭县| 股票| 叶城县| 邮箱| 信阳市| 静海县| 浠水县| 延川县| 中西区| 清远市| 平昌县| 志丹县| 于田县| 宕昌县| 额济纳旗| 清远市| 大理市| 沁源县| 马尔康县| 周至县| 稻城县| 海南省| 阳西县| 即墨市| 顺昌县| 敦化市| 乌海市| 伽师县| 攀枝花市| 弥勒县| 砀山县| 康平县| 桓仁| 保靖县| 滨海县| 成安县| 比如县| 万年县| 永顺县| 南华县|