文件流是以外存文件為輸入輸出對象的數據流。輸出文件流是從內存流向外存文件的數據,輸入文件流是從外存文件流向內存的數據。每一個文件流都有一個內存緩沖區與之對應。
請區分文件流與文件的概念,不用誤以為文件流是由若干個文件組成的流。文件流本身不是文件,而只是以文件為輸入輸出對象的流。若要對磁盤文件輸入輸出,就必須通過文件流來實現。
在C++的I/O類庫中定義了幾種文件類,專門用於對磁盤文件的輸入輸出操作。在 圖13.2(詳情請查看:與C++輸入輸出有關的類和對象)中可以看到除了標准輸入輸出流類istream、ostream和iostream類外,還有3個用於文件操作的文件類:
-
ifstream類,它是從istream類派生的,用來支持從磁盤文件的輸入。
-
ofstream類,它是從ostream類派生的,用來支持向磁盤文件的輸出。
-
fstream類,它是從iostream類派生的,用來支持對磁盤文件的輸入輸出。
要以磁盤文件為對象進行輸入輸出,必須定義一個文件流類的對象,通過文件流對象將數據從內存輸出到磁盤文件,或者通過文件流對象從磁盤文件將數據輸入到內存。
其實在用標准設備為對象的輸入輸出中,也是要定義流對象的,如cin、cout就是流對象,C++是通過流對象進行輸入輸出的。由於cin、cout已在iostream.h中事先定義,所以用戶不需自己定義。在用磁盤文件時,由於情況各異,無法事先統一定義,必須由用戶自己定義。此外,對磁盤文件的操作是通過文件流對象(而不是cin和cout)實現的。文件流對象是用文件流類定義的,而不是用istream和ostream類來定義的。可以用下面的方法建立一個輸出文件流對象:
ofstream outfile;
如同在頭文件iostream中定義了流對象cout —樣,現在在程序中定義了outfile為 ofstream類(輸出文件流類)的對象。但是有一個問埋還未解決:在定義 cout 時已將它和標准輸出設備(顯示器)建立關聯,而現在雖然建立了一個輸出文件流對象,但是還未指定它向哪一個磁盤文件輸出,需要在使用時加以指定。下一節即將解答這個問題。