C++面向對象-27-讀寫文本文件

       前面學習了多態,現在我們開始學習一些C++的武器,也就是一些常用的類庫。程序在運行時產生的數據都屬於臨時數據,程序一旦運行結束都會被釋放。通過文件可以將數據持久化,也就是把數據寫入文件,叫序列化,程序讀取文件,顯示出各種數據。這個過程叫反序列化。這篇開始我們來學習下C++如何讀寫文件。

1.文件分文本文件和二進制文件
1)文本文件,文件以文本的ASCII碼形式存儲在計算機中
2)二進制文件,文件以文本的二進制形式存儲在計算機中,用戶一般不能直接讀懂它們。(都是01這樣的數據)

 

2.C++操作文件的三大類
1.ofstream:寫操作,outputStream
2.ifstream: 讀操作 inputStream, f表示file
3.fstream: 讀寫操作

 

3.寫文本文件的5個步驟
1)包含頭文件
#include <fstream>
2) 創建流對象
 ofstream ofs;
3) 打開文件
  ofs.open("文件路徑", 打開方式);
4)寫數據
  ofs << "寫入數據";
5)關閉文件流
   ofs.close();

下面這個表格,統計了各種打開方式

上面的打開方式可以結合一起使用,例如 ios::ate | ios::binary

使用管道符連接多個打開方式。

 

下面來寫一個寫文本文件的代碼,例如就test.txt吧

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

void test01()
{
    //2.創建流對象
    ofstream ofs;
    
    //3.打開流文件
    ofs.open("test.txt", ios::ate | ios::out);

    //4.寫入文件
    ofs << "這是寫入文件練習";

    //5.關閉流對象
    ofs.close();
}

int main()
{

    test01();
    system("pause");
    return 0;
}

運行結果

 

4.讀文本文件

讀文件的步驟如下
1.包含頭文件
#include <fstream>

2.創建流對象
 ifstream ifs;

3.打開文件並判斷文件是否打開成功
 ifs.open("文件路徑", 打開方式);

4.讀數據
 四種方式讀取
 
5. 關閉文件
  ifs.close()

這次我們要讀文件的內容如下

 

相關代碼

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

void test01()
{
    //2.創建流對象
    ifstream ifs;
    
    //3.打開流文件
    ifs.open("test.txt", ios::in);
    //判斷文件是否打開成功
    if( !ifs.is_open())
    {
        cout << "打開文件失敗!" << endl;
        return;
    }

    //4.讀文件,第一種方法
    char buf[1024] = {0};
    while (ifs >> buf)
    {
        cout << buf << endl;
    }
    
    //5.關閉流對象
    ifs.close();
}

int main()
{
    test01();
    system("pause");
    return 0;
}

運行結果

上面介紹了第一種讀文件,大致原理是,先初始化一個大小爲1024的字節數組,然後讀取一行就存入buf字節數組。

再來看看其他三種讀文件的方法(剩下代碼都相同)

     //4.讀文件,第二種方法
    char buf[1024] = {0};
    while (ifs.getline(buf, 1024))
    {
        cout << buf << endl;
    } 

第三種,使用字符串方法

    //4.讀文件,第三種方法
    string buf;
    while (getline(ifs, buf))
    {
        cout << buf << endl;
    } 
    

第四種

    //4. 讀文件,第四種,不推薦
    char c;
    while ( (c = ifs.get()) != EOF)  // EOF: end of file
    {
        cout << c;
    }

第四種,這裏不推薦,效率很慢。原理是一次只讀取一個字符,存到c,然後判斷是否讀到文件結束位置,EOF就是一個標記位置。這裏讀取一個字符,打印出一個字符,其中換行也是一個字符。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章