1. 程式人生 > 其它 >c++筆記_檔案輸入輸出

c++筆記_檔案輸入輸出

技術標籤:c++經驗分享其他面試程式人生

文章目錄


一、檔案輸入輸出

標頭檔案fstream定義了三個型別來支援檔案IO:ifstream從一個給定檔案讀取資料,ofstream向一個給定檔案寫入資料,以及fstream可以讀寫給定檔案。

#include<fstream> 			//引入fstream標頭檔案

//除了繼承iostream型別的行為外,還新增了一些新的成員來管來與流關聯的檔案
fstream fstrm;				//例項化物件
fstream fstrm
(s); //例項化物件,並開啟名為s的檔案。s可以是string型別或者是一個C風格字串的指標 fstream fstrm(s,mode); //按指定的mode開啟s檔案 fstrm.open(s); //開啟名為s的檔案,並將檔案與fstrm繫結。返回void fstrm.close(); //關閉fstrm繫結的檔案。返回void fstrm.is_open(); //返回一個bool值,指出fstrm關聯的檔案是否返回成功開啟且尚未關閉

二、檔案模式

每個流有一個關聯的檔案模式,用來指出如何使用檔案

in      以讀方式開啟
out 	以寫方式開啟
app		每次寫操作寫均定位到檔案末尾
ate 	開啟檔案後立即定位到檔案末尾
trunc	截斷檔案
binary  以二進位制方式進行IO

指定檔案模式有如下限制:

1.只可以對ofstream或fstream物件設定out模式。
2.只可以對ifstream或fstream物件設定in模式。
3.只有當out也被設定時才可設定trunc模式。
4.只要trunc沒被設定,就可以設定app模式。在app模式下,即使沒有顯式指定out模式,檔案也總是以輸出方式被開啟。
5.預設情況下,即使沒有指定trunc,以out模式開啟的檔案也會被截斷。為了保留out模式開啟的檔案的內容,必須同時指定app模式,這樣只會講
資料追加寫到檔案末尾:或者同時指定in模式,即開啟檔案同時進行讀寫操作。
6.ate和binary模式可用於任何型別的檔案流物件,且可以與其他任何檔案模式組合使用。

每個檔案流型別都定義了一個預設的檔案模式,當未指定檔案模式時,就會使用預設模式。ifstream關聯的檔案預設以in模式開啟;與ofstream關聯的檔案預設以out模式開啟;與fstream關聯的檔案預設以in和out模式開啟。

1.以out模式開啟檔案會丟棄已有資料

預設情況下,開啟一個ofstream時,檔案的內容會被丟棄。阻止一個ofstream清空給定檔案內容的方法是同時指定app模式:

//在這幾個語句中,filel都被截斷
ofstream out("filel");				//隱含以輸出模式開啟檔案並截斷檔案
ofstream out2("filel",ofstream::out);	//隱含地截斷檔案
osftream out3("filel",ofstream::out|ofstream::trunc);

//為了保留檔案內容,必須顯示指定app模式
ofstream app("fille2",ofstream::app);			//隱含為輸出模式
ofstream app("file2",ofstream::out|ofstream::app);

2.每次呼叫open時都會確定檔案模式

每次開啟檔案時,都要設定檔案模式,可能是顯式的設定,也可能是隱式地設定。當程式未指定模式時,就使用預設值。

ofstream out;					//未指定模式開啟檔案
out.open("scratchapd");			//模式隱含設定為輸出或截斷
out.close();					//關閉out,以便將其用於其他檔案
out.open("precious",osftream:app);			//模式為輸出和追加
out.close();