打開(kāi)文件可以有兩種方式,第一種可以使用fstream類的構(gòu)造函數(shù)。
fstream file("test.dat",ios_base::in|ios_base::out|ios_base::app);
另外一種方法就是使用open函數(shù)。
fstream file;
file.open("test.dat",ios_base::in|ios_base::out|ios_base::app);
這樣就可以打開(kāi)一個(gè)可讀寫(xiě)的文件了。如果文件不存在的話,就會(huì)創(chuàng)建一個(gè)新文件并且以讀寫(xiě)方式打開(kāi)。
這里需要說(shuō)明一點(diǎn),如果文件不存在的話,open函數(shù)中第二個(gè)參數(shù)必須包含ios_base::out|ios_base::app,
否則就不能正確創(chuàng)建文件。
2、寫(xiě)文件。
先進(jìn)性寫(xiě)文件的操作否則讀一個(gè)空文件是沒(méi)有意義的。
既然是寫(xiě)二進(jìn)制文件可以向文件中寫(xiě)入一個(gè)整形值。寫(xiě)二進(jìn)制字符只能使用write函數(shù)。
但是write函數(shù)的原形是write(const char * ch, int size)。第一個(gè)參數(shù)是char *類型,所以需要把將要寫(xiě)入
文件的int類型轉(zhuǎn)換成char *類型。這里的轉(zhuǎn)換困擾了我好幾天,不過(guò)終于弄明白了。代碼如下。
int temp;
file.write((char *)(&temp),sizeof(temp));
3、讀文件。
可以寫(xiě)文件了,讀文件就好辦多了。讀文件需要用到read函數(shù)。其參數(shù)和write大致相同,read(const char * ch, int size)。
要把內(nèi)容讀到int類型變量中同樣涉及到一個(gè)類型轉(zhuǎn)換的問(wèn)題。和寫(xiě)文件一樣。
int readInt;
file.read((char *)(&readInt),sizeof(readInt));
這樣文件中的int值就讀入到int型變量readInt中了。
4、文件指針。
在文件的讀寫(xiě)過(guò)程中往往需要對(duì)文件進(jìn)行選擇性讀取。所以需要進(jìn)行文件指針的移動(dòng)。這是需要用到seekg和seekp函數(shù)。
在fstream類中有兩個(gè)文件指針,一個(gè)是讀取文件的指針,一個(gè)是寫(xiě)文件的指針?lè)謩e用tellg和tellp文件來(lái)取得指針的位置。
同樣seekg和seekp兩個(gè)函數(shù)分別是對(duì)這兩個(gè)指針進(jìn)行移動(dòng)的函數(shù)。這兩個(gè)函數(shù)的參數(shù)都是一樣的。
先對(duì)幾個(gè)枚舉類型進(jìn)行一下說(shuō)明:
ios_base::beg ——文件開(kāi)始位置
ios_base::cur ——文件當(dāng)前位置
ios_base::end ——文件末尾位置
下面以seekg為例說(shuō)明一下指針移動(dòng)的方法:
file.seekg(3) ——指針移動(dòng)到第三個(gè)字符的位置
file.seekg(ios_base::beg) ——指針移動(dòng)到文件開(kāi)頭
file.seekg(ios_base::end) ——指針移動(dòng)到文件末尾
file.seekg(-3,ios_base::cur) ——指針當(dāng)前位置向前移動(dòng)三個(gè)字符
file.seekg(3,ios_base::cur) ——指針當(dāng)前位置向后移動(dòng)三個(gè)字符
file.seekg(3,file.tellg()) ——指針當(dāng)前位置向后移動(dòng)三個(gè)字符
file.seekg(file.tellg()+3) ——指針當(dāng)前位置向后移動(dòng)三個(gè)字符
5、對(duì)文件操作完畢后別忘了關(guān)閉文件。
file.close();
以上5個(gè)步驟就完成了對(duì)文件的讀寫(xiě)操作。文本文件的操作是相同的,比二進(jìn)制文件還要簡(jiǎn)單。
聯(lián)系客服