正文 第十一章 再論C++的輸入_輸出(二)(3 / 3)

當向一個文件中寫人數據時,如果你不希望先前所存儲的數據被覆蓋,則應以ios::app方式打開文件。若以ioS::out方式打開一個已經存在的文件,該文件中的數據將被後來所寫入的數據厲蓋。

不論以ios::out或ios::app方式打開一個文件,若該文件不存在,都將自動產生一個新文件。

還可以使用多種方式打開一個文件,隻要用按位或運算符將它們連接起來。例如,我們以讀寫方式打開一個文件:

fstreamiofile(“testtxt”,ios::inIios::out);

2.如果以隻讀方式打開一個文件,還可以使用ifstream對象。

例如:ifstreaminfile(“test.txt”,ios::in);

3.如果以隻寫方式打開一個文件,還可以使用ofetream對象。

例如:ofstreamoutfile(“test.txt”,ios::out);

二、文件數據流的操作

1.成員函數open()

當定義一個fstream類對象時,還可以不帶參數,知道真正要打開一個文件時,再使用成員函數open()來打開文件。通過成員函數open()打開文件的一般形式:fstream對象名;

對象名.open(文件名,訪問方式);

例如:fstreamiofile;

iofile.open(“test.txt”,ios::inIios::out);

該語句以讀寫方式打開文件test.txt。

有些情況下,也可以通過類ifstream或ofstream的對象來打開文件。

2.成員函數close()不論是以定義一個fstream類對象方式打開文件,還是以成員函數open()來打開文件,最終都要使用成員函數dose0關閉文件。

使用成員函數close()關閉文件的一般形式:

對象名.close();

注意,dose()函數不帶任何參數,且無返回值。

3.檢測錯誤函數

一個好的應用程序對於任何可能發生的錯誤都應該有相應的措施,如警告信息或提示信息等。

c++對於數據流的操作狀態提供了一組檢測函數,用來對文件流進行檢測更為重要。這些函數定義在基類ios中:inteof();//數據流(或文件流)達到末尾,返回真值(hire)。intbad();//流操作發生錯誤,返回真值,此時有數據丟失的可能。intfail();//當bad()返回真值,它也返回真值,但數據不會丟失。intgood();//無任何錯誤發生,返回真值。

經常使用的是eof()和fail()函數。

在對文件讀寫之前,可以使用fail()函數來檢查文件是否被正確打開。

上麵的代碼中,試圖以讀寫方式打開文件,如果打開失敗則fail()返回真值,表示文件沒有正確打開,然後發出錯誤提示信息。

當我們從文件中讀取數據時,可以使用eof0函數判斷文件中數據是否到達末尾。

當讀到文件末尾時,則eof0返回真值,因此,Mile.eof0為假值,則跳出循環體接著往下執行。

三、舉例

例11.8類Student用來描述學生自然情況。我們建立一個student,txt文件,將幾個學生信息數據保存到文件中。

在這個例子中,我們先以隻寫方式打開文件“studem.txt”,然後向該文件中寫人三個Student類型的數據信息,最後關閉文件。

注意,本例與例11.6除了測試程序外,是完全一樣的,它們都對輸出運算符