IO標準庫——③文件輸入輸出

頭文件fstream定義了三個類型來支持文件IO:

  • ifstream從一個給定文件讀取數據。
  • ofstream向一個給定文件寫入數據。
  • fstream可以讀寫給定文件。

特別是,我們可以用IO操作符來讀寫文件,可以用getline從一個ifstream讀取數據。

文件輸入輸出

當我們想要讀寫一個文件時,我們有兩種方法。

方式一

我們首先定義一個文件流對象,此文件沒有與任何文件關聯起來,即,空文件流對象。

fstream fstream_object;

如果我們定義了一個空文件流對象,可以隨後調用open函數來將它與文件關聯起來。

每個文件流類都定義了一個名爲open的成員函數,它完成一些系統相關的操作,來定位給定的文件,並視情況打開爲讀或寫模式。

fstream_object.open(s);

實際上,對一個已經打開的文件流調用open函數可能會失敗,並會導致failbit被置位,隨後的試圖使用文件流的操作都會失敗。

由於調用open函數可能失敗,進行open函數是否調用成功的檢測通常是一個好習慣。

if(fstream_object)

一旦一個文件流已經打開,它就保持與對應文件的關聯。

爲了將文件流關聯到另一個文件,我們必須首先關閉已經關聯的文件。

fstream_object.close()

demo如下:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    fstream fstream_object;
    fstream_object.open("/home/xjk/CLionProjects/4-23/data.txt");
    fstream_object << "no.1 line!" << endl;
    fstream_object << "no.2 line!" << endl;
    fstream_object.close();
    cout << "OK" << endl;
    return 0;
}

方式二

除了上面的方法外,當我們想讀寫一個文件時,我們可以定義一個文件流對象,並直接將其與文件關聯起來。

當我們創建文件流對象時,如果我們提供了文件名,則open函數被自動調用。

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    fstream fstream_object("/home/xjk/CLionProjects/4-23/data.txt");
    fstream_object << "no.1 line!!!" << endl;
    fstream_object << "no.2 line!!!" << endl;
    fstream_object.close();
    cout << "OK" << endl;
    return 0;
}

文件模式

每個流都有一個關聯的文件模式,用來指出如何使用文件。

文件模式 解釋
in 以讀方式打開文件
out 以寫方式打開文件
app 每次寫操作前均定位到文件末尾
ate 打開文件後立即定位到文件末尾
trunc 截斷文件
binary 以二進制方式進行IO

無論用那種方式打開文件,我們都可以指定文件模式,調用open打開文件可以,用一個文件名初始化流對象來隱式打開文件時也可以。

值得注意的是,默認情況下,即使我們沒有指定trunc,以out模式打開的文件也會被截斷。爲了保留以out模式打開的文件的內容,我們必須同時指定app模式,這樣只會將數據追加寫到文件末尾。

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