[C++]開啟和關閉一個檔案

在 C++程式中,當要打開一個串流(stream)形式的檔案, 我們可以有三種選擇模式:輸入, 輸出, 和輸入/輸出。要建立一個輸入串流(input stream)的檔案─也就是要將資料從檔案讀入,必須宣告一個資料型別為ifstream的輸入串流(input stream)的變數。例如

    ifstream in;

in是輸入串流檔案的變數名稱。

同樣的,如果要建立一個輸出串流(output stream)的檔案─也就是要將資料寫入檔案,必須宣告一個資料型別為ofstream輸入串流(output stream)的變數。例如

    ofstream out;

如果要建立一個可以輸入也可以輸出的串流檔案,就要使用fstream來宣告檔案物件:  

fstream io;   // 輸入和輸出 

一旦建立一個串流檔案物件,我們可以使用他的專屬函式open()(又稱為成員函式)來開啟檔案, 這個函式再<fstream.h>中的原型宣告如下:  

void ifstream::open(const char *filename, ios::openmode mode = ios::in);

void ofstream::open(const char *filename, ios::openmode mode = ios::out | ios::trunc);

void fstream::open(const char *filename, ios::openmode mode = ios::in | ios::out);  

使用open()需傳入兩個參數。其中, filename是檔案名稱,filename可以包含一個檔案的路徑。openmode參數用來指定檔案是以什麼方式被開啟的。所有的開啟模式如下:  

ios::app

ios::ate

ios::binary

ios::in

ios::out

ios::trunc  

ios::app是附加模式,使用這個模式開啟檔案,會將檔案的指標指到檔案的尾端,因此程式寫入的第一筆資料會從原本檔案最會一筆資料之後開始添加,而不能任意地存取前面的資料內容。

使用ios::ate 開啟檔案被時,該檔案的指標會指到檔案的尾端,雖然ios::ate一開始便指到檔案的尾端,但在這檔案物件宣告的有效範圍內,輸入/輸出操作仍然能夠發生在檔案任何位置。  

ios::in模式宣告這個檔案能夠寫入資料,而ios::out 則宣告這個檔案能夠讀取。  

ios::binary 模式宣告這個檔案是以二進位模式進行存取。如果一個檔案沒有宣告成ios::binary 模式,整個檔案的存取都是以文字模式進行。 在文字模式裡,資料會自動從事字元轉換,例如'\n'字元經過字元轉換會自動解譯成換行指令,因此該字元資料就不會備變數讀取。然而, 當一個檔案在二進位模式中被開啟時,就不會有字元轉換的情形發生,因此上述換行字元'\n'就會直接以二進位資料被讀取或寫入。

ios::trunc模式宣告這個檔案是允許改寫(或覆蓋)一個已經存在檔案的內容。  

下面程式碼指示打開一個輸出檔案:  

ofstream out;

out.open("data.txt", ios::out); 
已邀請:

要回復主題請先登入註冊