C 檔案輸入輸出

2021-10-17 03:20:22 字數 2984 閱讀 6808

輸入輸出是以系統指定的標準裝置(輸入裝置為鍵盤,輸出裝置為顯示器)為物件的。在實際應用中,常以磁碟檔案作為物件。即從磁碟檔案讀取資料,將資料輸出到磁碟檔案。

和檔案有關係的輸入輸出類主要在fstream.h這個標頭檔案中被定義,在這個標頭檔案中主要被定義了三個類,由這三個類控制對檔案的各種輸入輸出操 作,他們分別是ifstream、ofstream、fstream,其中fstream類是由iostream類派生而來,他們之間的繼承關係見下圖所示。

由於檔案裝置並不像顯示器螢幕與鍵盤那樣是標準預設裝置,所以它在fstream.h標頭檔案中是沒有像cout那樣預先定義的全域性物件,所以我們必須自己定義乙個該類的物件。

ifstream類,它是從istream類派生的,用來支援從磁碟檔案的輸入。

ofstream類,它是從ostream類派生的,用來支援向磁碟檔案的輸出。

fstream類,它是從iostream類派生的,用來支援對磁碟檔案的輸入輸出。

所謂開啟(open)檔案是一種形象的說法,如同開啟房門就可以進入房間活動一樣。 開啟檔案是指在檔案讀寫之前做必要的準備工作,包括:

1)為檔案流物件和指定的磁碟檔案建立關聯,以便使檔案流流向指定的磁碟檔案。

2)指定檔案的工作方式,如,該檔案是作為輸入檔案還是輸出檔案,是ascii檔案還是二進位制檔案等。

以上工作可以通過兩種不同的方法實現。

呼叫檔案流的成員函式open。如

ofstream outfile; //定義ofstream類(輸出檔案流類)物件outfile

outfile.open(「f1.dat」,ios::out); //使檔案流與f1.dat檔案建立關聯

第2行是呼叫輸出檔案流的成員函式open開啟磁碟檔案f1.dat,並指定它為輸出檔案, 檔案流物件outfile將向磁碟檔案f1.dat輸出資料。ios::out是i/o模式的一種,表示以輸出方式開啟乙個檔案。或者簡單地說,此時f1.dat是乙個輸出檔案,接收從記憶體輸出的資料。

呼叫成員函式open的一般形式為:

檔案流物件.open(磁碟檔名, 輸入輸出方式);

磁碟檔名可以包括路徑,如"c:\new\f1.dat",如預設路徑,則預設為當前目錄下的檔案。

在定義檔案流物件時指定引數

在宣告檔案流類時定義了帶引數的建構函式,其中包含了開啟磁碟檔案的功能。因此,可以在定義檔案流物件時指定引數,呼叫檔案流類的建構函式來實現開啟檔案的功能。如

ostream outfile(「f1.dat」,ios::out); 一般多用此形式,比較方便。作用與open函式相同。

輸入輸出方式是在ios類中定義的,它們是列舉常量,有多種選擇,見表13.6。

幾點說明:

新版本的i/o類庫中不提供ios::nocreate和ios::noreplace。

每乙個開啟的檔案都有乙個檔案指標,該指標的初始位置由i/o方式指定,每次讀寫都從檔案指標的當前位置開始。每讀入乙個位元組,指標就後移乙個位元組。當文 件指標移到最後,就會遇到檔案結束eof(檔案結束符也佔乙個位元組,其值為-1),此時流物件的成員函式eof的值為非0值(一般設為1),表示檔案結束 了。

但不能組合互相排斥的方式,如 ios::nocreate l ios::noreplace。

在對已開啟的磁碟檔案的讀寫操作完成後,應關閉該檔案。關閉檔案用成員函式close。

如 outfile.close( ); //將輸出檔案流所關聯的磁碟檔案關閉

所謂關閉,實際上是解除該磁碟檔案與檔案流的關聯,原來設定的工作方式也失效,這樣就不能再通過檔案流對該檔案進行輸入或輸出。此時可以將檔案流與其他磁碟檔案建立關聯,通過檔案流對新的檔案進行輸入或輸出。如

此時檔案流outfile與f2.dat建立關聯,並指定了f2.dat的工作方式。

#include

//檔案讀寫

//文字檔案讀寫(即ascii檔案)

void

test01()

//讀檔案

char ch;

while

(ism.

get(ch)

)//關閉檔案

ism.

close()

; osm.

close()

;}

二進位制檔案不是以ascii**存放資料的,它將記憶體中資料儲存形式不加轉換地傳送到磁碟檔案,因此它又稱為記憶體資料的映像檔案。因為檔案中的資訊不是字元資料,而是位元組中的二進位制形式的資訊,因此它又稱為位元組檔案。

對二進位制檔案的操作也需要先開啟檔案,用完後要關閉檔案。在開啟時要用ios::binary指定為以二進位制形式傳送和儲存。二進位制檔案除了可以作為輸入檔案或輸出檔案外,還可以是既能輸入又能輸出的檔案。這是和ascii檔案不同的地方。

對二進位制檔案的讀寫主要用istream類的成員函式read和write來實現。這兩個成員函式的原型為

istream& read(char *buffer,int len);

ostream& write(const char * buffer,int len);

字元指標buffer指向記憶體中一段儲存空間。len是讀寫的位元組數。呼叫的方式為:

a.write(p1,50);

b.read(p2,30);

上面第一行中的a是輸出檔案流物件,write函式將字元指標p1所給出的位址開始的50個位元組的內容不加轉換地寫到磁碟檔案中。在第二行中,b是輸入檔案流物件,read 函式從b所關聯的磁碟檔案中,讀入30個位元組(或遇eof結束),存放在字元指標p2所指的一段空間內。

//二進位制檔案操作  物件序列化

class

person

person

(int age,

int id)

:age

(age),id

(id)

void

show()

public

:int age;

int id;};

void

test02()

C 檔案輸入輸出

檔案輸入輸出 1 directory info 和file info 型別 directory和file通過靜態成員實現操作,擴充套件了system.object。返回強型別物件。directoryinfo和fileinfo通過例項級方法實現 必須使用new關鍵字分配它們 從filesystemin...

C 檔案輸入輸出

儲存在變數,陣列,物件中的資料都是暫時性的,當程式退出以後就會丟失,為了永久性儲存程式中有用資料,需要將資料以檔案形式儲存於磁碟或者光碟等物理介質。c 檔案主要是兩種 文字檔案和二進位制檔案 例如c 源程式是儲存在文字檔案,而最後的可執行程式是二進位制檔案。當然計算機本身是不區分二進位制檔案和文字的...

C 檔案輸入輸出

1 文字檔案的讀寫 文字檔案的讀寫,可以使用類似cin,cout方式,此外還有getline,get,二進位制檔案讀寫方式read,write經測試也可以使用 include include int main char buffer 256 注意使用getline讀至buffer,需新增 0 whi...