4.文件流的定位(1)文件位置與定位方式流的位置以字節(jié)為單位,通常表示為一個(gè)長(zhǎng)整數(shù),用類形符號(hào)pos_type代表。C+ +流的位置有兩種:輸入(get)位置和輸出(put)位置。輸入流只有輸入位置,流對(duì)象中標(biāo)志這種位置的指針?lè)Q為輸入指針。輸出流只有輸出位置,流對(duì)象中標(biāo)志這種位置的指針?lè)Q為輸出指針。輸入輸出流兩種位置都有,因而同時(shí)具備輸入指針和輸出指針:這兩個(gè)指針可以分別控制、互不干擾。對(duì)于文件流,這兩種指針可統(tǒng)稱文件指針。每一次輸入或輸出都是從指針?biāo)付ǖ奈恢锰庨_(kāi)始的,指針在輸入輸出過(guò)程中不斷移動(dòng),完成輸入或輸出 后即指向下一個(gè)需要輸入或輸出的位置。因此,在進(jìn)行一般的輸入輸出操作時(shí),指針總是向后(文件尾方向)移動(dòng)。也可以通過(guò)專門的定位操作操縱指針,而且既可以向后移動(dòng),也可以向前移動(dòng),見(jiàn)下面的說(shuō)明。C+ +流的定位方式(也就是指針移動(dòng)方式)有三種,被定義為ios_base::seek_dir中的一組枚舉符號(hào):ios_base::beg相對(duì)于文件首ios_base::cur相對(duì)于當(dāng)前位置(負(fù)數(shù)表示當(dāng)前位置之前)ios_base::end相對(duì)與文件尾(2)輸入定位輸入流對(duì)象中與輸入定位有關(guān)的成員函數(shù)有:●istream_type seekg(off_type off,ios_base ::seek_dir dir);按方式dir將輸入定位于相對(duì)位置off處,函數(shù)返回流對(duì)象本身的引用●pos_type tellg();返回當(dāng)前的輸入位置,即從流開(kāi)始處到當(dāng)前位置的字節(jié)數(shù)●bool eof()const;判定輸入流是否結(jié)束,結(jié)束時(shí)返回true,否則返回false。(3)輸出定位在輸出流對(duì)象中與輸出定位有關(guān)的成員函數(shù)有:●ostream_type& seekp( pos_type pos);(絕對(duì)定位)將輸出流定位于絕對(duì)位置pos,函數(shù)返回流對(duì)象本身的引用● ostream_type& seekp(off_type off,ios_base ::seekdir dir);(相對(duì)定位)按方式dir將輸出流定位于相對(duì)位置off處,函數(shù)返回流對(duì)象本身的引用●pos_type tellp();返回當(dāng)前的輸出位置(pos_type通常就是long),即從流開(kāi)始處到當(dāng)前位置的字節(jié)數(shù)。
5.特殊的文件流:CON和PRN以"CON"為文件名建立的輸入流所聯(lián)系的設(shè)備是鍵盤,可用于鍵盤輸入;以"CON"為文件名建立的輸出流所聯(lián)系的設(shè)備是顯示器,可用于顯示輸出。
6.有格式輸入輸出針對(duì)文件的格式化輸入輸出與針對(duì)標(biāo)準(zhǔn)設(shè)備cin和cout的輸入輸出十分相似,但仍有兩點(diǎn)需要注意。作為格式化輸入輸出,所操作的文件都是純文本文件,因此可以用記事本或?qū)懽职宓任谋揪庉嬈鱽?lái)準(zhǔn)備這樣的數(shù)據(jù)文件,以供應(yīng)用程序輸入處理;應(yīng)用程序通過(guò)格式化輸出所生成的數(shù)據(jù)文件也同樣可以用記事本或?qū)懽职宓任谋揪庉嬈鱽?lái)查看。每一個(gè)作為格式化輸入源的流對(duì)象(如cin或一個(gè)輸入文件流)都有一個(gè)流結(jié)束標(biāo)記,讀到該標(biāo)記即表明其后沒(méi)有更多的數(shù)據(jù)了?梢杂昧鞯某蓡T函數(shù)eof()來(lái)判斷是否讀到流結(jié)束標(biāo)記。對(duì)于輸入流對(duì)象cin,可以通過(guò)在鍵盤上打入Z來(lái)插入流結(jié)束標(biāo)記,但在完成輸入后,必須執(zhí)行一次cin.clear();后,cin才能繼續(xù)使用。
7.無(wú)格式輸入輸出對(duì)于無(wú)格式輸入輸出,數(shù)據(jù)的內(nèi)部存儲(chǔ)格式與外部存儲(chǔ)格式完全相同。無(wú)格式輸入輸出很多情況下是針對(duì)二進(jìn)制文件的,輸入輸出需要用read函數(shù)或write函數(shù),因而要求文件是按ios_base::binary模式打開(kāi)的。注意和不能用于按ios_base::binary打開(kāi)的文件(二進(jìn)制文件)的輸入和輸出。(1)無(wú)格式輸入無(wú)格式輸入對(duì)輸入的數(shù)據(jù)不做任何轉(zhuǎn)換,輸入流對(duì)象中有關(guān)的成員函數(shù)主要有:●int_type get();●istream_type& get(char_type& c);●istream_typegetline(char_type* s,streamsize n,char_type delim);●istream_type& getline(char_type* s,streamsize n);●istream_type&ignore(streamsize n=1,int_type delim=traits::eof())●int_type peek();●istream_type& putback(char_type c);●istream_type& read(char_type* s,streamsize n);(2)無(wú)格式輸出無(wú)格式輸出對(duì)輸出的數(shù)據(jù)不做任何轉(zhuǎn)換,輸出流對(duì)象中的有關(guān)成員函數(shù)主要有:●ostream_type& put(char c);●ostream_type& write(const char*s ,streamsize n)。
希望與更多計(jì)算機(jī)等級(jí)考試的網(wǎng)友交流,請(qǐng)進(jìn)入計(jì)算機(jī)等級(jí)考試論壇
更多信息請(qǐng)?jiān)L問(wèn):考試吧計(jì)算機(jī)等級(jí)考試欄目
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |