頭文件fstream包含了ifstream、ofstream、fstream三個(gè)類,可以通過(guò)定義這三個(gè)類的對(duì)象來(lái)實(shí)現(xiàn)相對(duì)應(yīng)的文件操作。
#includeofstream //文件寫操作,內(nèi)存寫入存儲(chǔ)設(shè)備
ifstream //文件讀操作,存儲(chǔ)設(shè)備讀取到內(nèi)存中
fstream //讀寫操作,對(duì)打開的文件可進(jìn)行讀寫操作
1.打開文件public member function
void open ( const char * filename,
ios_base::openmode mode = ios_base::in | ios_base::out );
void open(const wchar_t *_Filename,
ios_base::openmode mode= ios_base::in | ios_base::out,
int prot = ios_base::_Openprot);
參數(shù) | filename | mode | prot |
---|---|---|---|
含義 | 操作文件名 | 打開文件方式 | 打開文件屬性(應(yīng)用少) |
ios::in | 為輸入(讀)而打開文件 |
---|---|
ios::out | 為輸出(寫)而打開文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 所有輸出附加在文件末尾 |
ios::trunc | 如果文件已存在先刪除文件 |
ios::binary | 二進(jìn)制方式 |
ofstream outfile;
outfile.open("Hello.txt",ios::in|ios::out|ios::binary)
0 | 普通文件,打開文件 |
---|---|
1 | 只讀文件 |
2 | 隱含文件 |
3 | 系統(tǒng)文件 |
對(duì)于文件的屬性也可以利用“|”和“+”進(jìn)行組合使用
ofstream out("\\\",ios::out);
ifstream in("\\\",ios::in);
fstream fil("\\\",ios::in|ios::out);
當(dāng)使用默認(rèn)的方式對(duì)文件進(jìn)行打開時(shí),可以使用成員函數(shù)is_open()對(duì)文件進(jìn)行是否已打開的驗(yàn)證。
2.關(guān)閉文件文本文件的讀寫可以如同類與控制臺(tái)交互一樣利用"<<”和">>"分別進(jìn)行寫和讀,如:
#includeint main()
{
ofstream file("out.txt");
if(file.is_open())
{
file<<"This is a test"<
#include#includeusing namespace std;
int main()
{
char buff[256];
ifstream infile("in.txt");
if(!infile.is_open())
cout<<"Error open"<
狀態(tài)標(biāo)志符的驗(yàn)證
有一些驗(yàn)證流的狀態(tài)的成員函數(shù)(所有都返回bool型返回值):
獲得和設(shè)置流指針
所有輸入/輸出流對(duì)象都有至少一個(gè)流指針:
可以使用以下成員函數(shù)來(lái)讀取或配置流指針:
seekg(pos_type position);
seekp(pos_type position);
使用這個(gè)原型,流指針被改變?yōu)橹赶驈奈募_始計(jì)算的一個(gè)絕對(duì)位置。要求傳入的參數(shù)類型與函數(shù) tellg 和tellp 的返回值類型相同。
seekg ( off_type offset, seekdir direction );
seekp ( off_type offset, seekdir direction );
使用這個(gè)原型可以指定由參數(shù)direction決定的一個(gè)具體的指針開始計(jì)算的一個(gè)位移(offset)。它可以是:
ios::beg | 從流開始位置計(jì)算的位移 |
---|---|
ios::cur | 從流指針當(dāng)前位置開始計(jì)算的位移 |
ios::end | 從流末尾處開始計(jì)算的位移 |
流指針 get 和 put 的值對(duì)文本文件(text file)和二進(jìn)制文件(binary file)的計(jì)算方法都是不同的,因?yàn)槲谋灸J降奈募心承┨厥庾址赡鼙恍薷?。由于這個(gè)原因,建議對(duì)以文本文件模式打開的文件總是使用seekg 和 seekp的第一種原型,而且不要對(duì)tellg 或 tellp 的返回值進(jìn)行修改。對(duì)二進(jìn)制文件,你可以任意使用這些函數(shù),應(yīng)該不會(huì)有任何意外的行為產(chǎn)生。
// obtaining file size
#include#includeconst char * filename = "test.txt";
int main () {
long l,m;
ifstream in(filename, ios::in|ios::binary);
l = in.tellg();
in.seekg (0, ios::end);
m = in.tellg();
in.close();
cout<< "size of "<< filename;
cout<< " is "<< (m-l)<< " bytes.\n";
return 0;
} //`獲取二進(jìn)制文件的大小
4.二進(jìn)制文件在二進(jìn)制文件中,使用<< 和>>,以及函數(shù)(如getline)來(lái)操作符輸入和輸出數(shù)據(jù),沒有什么實(shí)際意義,雖然它們是符合語(yǔ)法的。
文件流包括兩個(gè)為順序讀寫數(shù)據(jù)特殊設(shè)計(jì)的成員函數(shù):write 和 read。第一個(gè)函數(shù) (write) 是ostream 的一個(gè)成員函數(shù),都是被ofstream所繼承。而read 是istream 的一個(gè)成員函數(shù),被ifstream 所繼承。類 fstream 的對(duì)象同時(shí)擁有這兩個(gè)函數(shù)。它們的原型是:
write ( char * buffer, streamsize size );
read ( char * buffer, streamsize size );
這里 buffer 是一塊內(nèi)存的地址,用來(lái)存儲(chǔ)或讀出數(shù)據(jù)。參數(shù)size 是一個(gè)整數(shù)值,表示要從緩存(buffer)中讀出或?qū)懭氲淖址麛?shù)。
// reading binary file
#include#includeconst char * filename = "test.txt";
int main () {
char * buffer;
long size;
ifstream in (filename, ios::in|ios::binary|ios::ate);
size = in.tellg();
in.seekg (0, ios::beg);
buffer = new char [size];
in.read (buffer, size);
in.close();
cout<< "the complete file is in a buffer";
delete[] buffer;
return 0;
}
//運(yùn)行結(jié)果:
The complete file is in a buffer
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
新聞標(biāo)題:C++中fstream-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)網(wǎng)址:http://chinadenli.net/article16/dhjddg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、軟件開發(fā)、Google、域名注冊(cè)、網(wǎng)站建設(shè)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容