C++寫文件全面指南

一、文件的基礎操作

文件是一種存儲數據的容器,通常用於長期保存程序的重要數據。C++標準庫提供了一組簡單而易用的函數來實現文件的讀寫操作。文件操作主要包括打開文件、讀取文件、寫入文件和關閉文件4個步驟。

1.文件打開

在進行文件讀寫操作前,必須先打開文件。C++標準庫提供了fstream頭文件,其中的fstream類就具有打開文件的功能。打開文件的方式有兩類:二進位模式和文本模式(默認為文本模式),可以通過打開方式的第二個參數來指定。

#include <fstream>
using namespace std;

int main()
{
    fstream file; // 聲明一個fstream對象
    file.open("test.txt", ios::in | ios::out | ios::trunc); 
    // 打開文件test.txt,若文件不存在則創建新文件,同時可讀寫文件
    if (!file) // 判斷文件是否打開成功
    {
        cout << "open failed." << endl;
        return 0;
    }
    return 0;
}

2.文件讀取

文件讀取有兩種方法:字元讀取和行讀取。其中,字元讀取使用get函數,行讀取使用getline函數。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    ifstream file("test.txt"); // 打開文件test.txt
    string line;
    while (getline(file, line)) // 按行讀取文件
    {
        cout << line << endl;
    }
    char ch;
    while (file.get(ch)) // 按字元讀取文件
    {
        cout << ch;
    }
    file.close(); // 關閉文件
    return 0;
}

3.文件寫入

文件寫入使用put函數和write函數。put函數用於像文件中寫入一個字元,write函數將一段數據寫入到文件中。

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ofstream file("test.txt");
    file.put('A'); // 向文件寫入字元A
    char str[] = "Hello World!";
    file.write(str, sizeof(str)); // 向文件寫入字元串Hello World!
    file.close();
    return 0;
}

4.文件關閉

文件關閉使用close函數,調用close函數後,文件被釋放並從內存中刪除。

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ofstream file("test.txt");
    file << "Hello World!";
    file.close(); // 關閉文件
    return 0;
}

二、文件的其他操作

除了基本的讀寫操作外,C++標準庫還提供了一些文件的其他操作,包括文件長度、文件指針位置、文件複製、文件重命名等。

1.文件長度

獲取文件長度使用tellg函數和seekg函數,tellg函數返回當前文件讀指針的位置,seekg函數用於設置文件讀指針的位置。

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream file("test.txt");
    file.seekg(0, ios::end); // 將讀指針設置到文件末尾
    int length = file.tellg(); // 獲取文件長度
    cout << length << endl;
    file.close();
    return 0;
}

2.文件指針位置

獲取文件指針位置使用tellp函數和seekp函數,同樣是用來操作文件讀寫指針的。

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ofstream file("test.txt");
    file << "Hello World!";
    file.seekp(0, ios::beg); // 將寫指針設置到文件開始位置
    file << "h"; // 寫入新的字元
    file.close();
    return 0;
}

3.文件複製

文件複製使用fstream和streambuf兩個類,其中fstream用來打開複製的文件,streambuf用來讀取原文件並寫入新文件。

#include <iostream>
#include <fstream>
#include <streambuf>
using namespace std;

int main()
{
    fstream file1("test1.txt", ios::in | ios::binary);
    fstream file2("test2.txt", ios::out | ios::binary);
    file2 << file1.rdbuf(); // 將file1的讀取緩衝區寫入file2
    file1.close();
    file2.close();
    return 0;
}

4.文件重命名

文件重命名使用rename函數,可以將一個文件重命名為另一個文件名。

#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    rename("test1.txt", "test2.txt"); // 將test1.txt重命名為test2.txt
    return 0;
}

三、代碼示例

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    // 文件打開
    fstream file("test.txt", ios::in | ios::out | ios::trunc);
    if (!file)
    {
        cout << "open failed." << endl;
        return 0;
    }

    // 文件讀取
    string line;
    while (getline(file, line))
    {
        cout << line << endl;
    }
    char ch;
    while (file.get(ch))
    {
        cout << ch;
    }

    // 文件寫入
    file.put('A');
    char str[] = "Hello World!";
    file.write(str, sizeof(str));

    // 文件長度
    file.seekg(0, ios::end);
    int length = file.tellg();
    cout << length << endl;

    // 文件指針位置
    file.seekp(0, ios::beg);
    file << "h";

    // 文件複製
    fstream file1("test1.txt", ios::in | ios::binary);
    fstream file2("test2.txt", ios::out | ios::binary);
    file2 << file1.rdbuf();
    file1.close();
    file2.close();

    // 文件重命名
    rename("test1.txt", "test2.txt");

    // 文件關閉
    file.close();
    return 0;
}

原創文章,作者:QUYHA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370387.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QUYHA的頭像QUYHA
上一篇 2025-04-22 01:14
下一篇 2025-04-22 01:14

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • 運維Python和GO應用實踐指南

    本文將從多個角度詳細闡述運維Python和GO的實際應用,包括監控、管理、自動化、部署、持續集成等方面。 一、監控 運維中的監控是保證系統穩定性的重要手段。Python和GO都有強…

    編程 2025-04-29
  • Python應用程序的全面指南

    Python是一種功能強大而簡單易學的編程語言,適用於多種應用場景。本篇文章將從多個方面介紹Python如何應用於開發應用程序。 一、Web應用程序 目前,基於Python的Web…

    編程 2025-04-29
  • Python wordcloud入門指南

    如何在Python中使用wordcloud庫生成文字雲? 一、安裝和導入wordcloud庫 在使用wordcloud前,需要保證庫已經安裝並導入: !pip install wo…

    編程 2025-04-29
  • vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常問題的解決

    本文旨在解決vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常的問題,提供完整的代碼示例供參考。 一、分析問題 首先,需了解vue中下載文件的情況。一般情況下,我們…

    編程 2025-04-29
  • Python字元轉列表指南

    Python是一個極為流行的腳本語言,在數據處理、數據分析、人工智慧等領域廣泛應用。在很多場景下需要將字元串轉換為列表,以便於操作和處理,本篇文章將從多個方面對Python字元轉列…

    編程 2025-04-29
  • Python小波分解入門指南

    本文將介紹Python小波分解的概念、基本原理和實現方法,幫助初學者掌握相關技能。 一、小波變換概述 小波分解是一種廣泛應用於數字信號處理和圖像處理的方法,可以將信號分解成多個具有…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • 為什麼用cmd運行Java時需要在文件內打開cmd為中心

    在Java開發中,我們經常會使用cmd在命令行窗口運行程序。然而,有時候我們會發現,在運行Java程序時,需要在文件內打開cmd為中心,這讓很多開發者感到疑惑,那麼,為什麼會出現這…

    編程 2025-04-29

發表回復

登錄後才能評論