第10章流類(lèi)庫(kù)與輸入輸出_第1頁(yè)
第10章流類(lèi)庫(kù)與輸入輸出_第2頁(yè)
第10章流類(lèi)庫(kù)與輸入輸出_第3頁(yè)
第10章流類(lèi)庫(kù)與輸入輸出_第4頁(yè)
第10章流類(lèi)庫(kù)與輸入輸出_第5頁(yè)
已閱讀5頁(yè),還剩56頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1第第1010章章 流類(lèi)庫(kù)與輸入輸出流類(lèi)庫(kù)與輸入輸出10.1 10.1 流、文件以及流、文件以及c+c+的基本流類(lèi)和文件流類(lèi)系統(tǒng)的基本流類(lèi)和文件流類(lèi)系統(tǒng)* *10.2 10.2 插入與提取運(yùn)算符的重載插入與提取運(yùn)算符的重載10.3 10.3 對(duì)輸入輸出格式進(jìn)行控制對(duì)輸入輸出格式進(jìn)行控制10.4 10.4 使用預(yù)定義的插入與提取運(yùn)算符對(duì)文件流進(jìn)行讀寫(xiě)操作使用預(yù)定義的插入與提取運(yùn)算符對(duì)文件流進(jìn)行讀寫(xiě)操作10.5 10.5 使用類(lèi)成員函數(shù)對(duì)文件流進(jìn)行操作使用類(lèi)成員函數(shù)對(duì)文件流進(jìn)行操作10.6 10.6 texttext文件與文件與binarybinary文件文件10.7 10.7 對(duì)數(shù)據(jù)文件進(jìn)行隨機(jī)

2、訪問(wèn)對(duì)數(shù)據(jù)文件進(jìn)行隨機(jī)訪問(wèn)210.1 10.1 流、文件以及流、文件以及c+c+的基本流類(lèi)和文件流類(lèi)系統(tǒng)的基本流類(lèi)和文件流類(lèi)系統(tǒng)- - 參看書(shū)參看書(shū)p232-234, 10.2p232-234, 10.2與與10.310.3節(jié)節(jié) c+ c+語(yǔ)言中的輸入輸出操作語(yǔ)言中的輸入輸出操作( (功能功能) )是由它所預(yù)是由它所預(yù)定義的諸定義的諸i/oi/o流類(lèi)的一個(gè)類(lèi)庫(kù)所提供的。流類(lèi)的一個(gè)類(lèi)庫(kù)所提供的。 1. 1. 流流( (stream)stream) 流流( (stream)stream)是一個(gè)邏輯概念是一個(gè)邏輯概念,它是,它是c+c+語(yǔ)言對(duì)語(yǔ)言對(duì)所有外部設(shè)備的邏輯抽象,它所有外部設(shè)備的邏輯抽象,它

3、代表的是某種流類(lèi)類(lèi)代表的是某種流類(lèi)類(lèi)型的一個(gè)對(duì)象型的一個(gè)對(duì)象。c+c+的的ioio系統(tǒng)將每個(gè)外部設(shè)備都轉(zhuǎn)系統(tǒng)將每個(gè)外部設(shè)備都轉(zhuǎn)換成一個(gè)稱(chēng)為流的邏輯設(shè)備,由流來(lái)完成對(duì)不同設(shè)換成一個(gè)稱(chēng)為流的邏輯設(shè)備,由流來(lái)完成對(duì)不同設(shè)備的具體操作。備的具體操作。3 2. 2. 文件文件( (file)file) 文件文件( (file)file)是一個(gè)物理概念是一個(gè)物理概念,代表存儲(chǔ)著信息集合的某,代表存儲(chǔ)著信息集合的某個(gè)個(gè)外部介質(zhì)外部介質(zhì),它是,它是c+c+語(yǔ)言語(yǔ)言對(duì)具體設(shè)備的抽象對(duì)具體設(shè)備的抽象。如,磁盤(pán)文。如,磁盤(pán)文件,顯示器,鍵盤(pán)。件,顯示器,鍵盤(pán)。 所有流所有流( (類(lèi)對(duì)象類(lèi)對(duì)象) )的行為都是相同的,

4、而不同的文件則可的行為都是相同的,而不同的文件則可能具有不同的行為。如,磁盤(pán)文件可進(jìn)行寫(xiě)也可進(jìn)行讀操作;能具有不同的行為。如,磁盤(pán)文件可進(jìn)行寫(xiě)也可進(jìn)行讀操作;顯示器文件則只可進(jìn)行寫(xiě)操作;而鍵盤(pán)文件只可進(jìn)行讀操作。顯示器文件則只可進(jìn)行寫(xiě)操作;而鍵盤(pán)文件只可進(jìn)行讀操作。 當(dāng)程序與一個(gè)文件交換信息時(shí),必須通過(guò)當(dāng)程序與一個(gè)文件交換信息時(shí),必須通過(guò)“打開(kāi)文件打開(kāi)文件”的操作將一個(gè)文件與一個(gè)流的操作將一個(gè)文件與一個(gè)流( (類(lèi)對(duì)象類(lèi)對(duì)象) )聯(lián)系起來(lái)。一旦建立了聯(lián)系起來(lái)。一旦建立了這種聯(lián)系,以后對(duì)該流這種聯(lián)系,以后對(duì)該流( (類(lèi)對(duì)象類(lèi)對(duì)象) )的訪問(wèn)就是對(duì)該文件的訪問(wèn),的訪問(wèn)就是對(duì)該文件的訪問(wèn),也就是對(duì)一個(gè)

5、具體設(shè)備的訪問(wèn)??赏ㄟ^(guò)也就是對(duì)一個(gè)具體設(shè)備的訪問(wèn)??赏ㄟ^(guò)“關(guān)閉文件關(guān)閉文件”的操作的操作將一個(gè)文件與流將一個(gè)文件與流( (類(lèi)對(duì)象類(lèi)對(duì)象) )的聯(lián)系斷開(kāi)。的聯(lián)系斷開(kāi)。4 3. 3. c+c+的基本流類(lèi)系統(tǒng)的基本流類(lèi)系統(tǒng) 在頭文件在頭文件 “ “iostreamiostream.h” .h” 中說(shuō)明中說(shuō)明( (預(yù)定義預(yù)定義) )了一批了一批基基本流類(lèi)本流類(lèi): : iosios - - 基本流類(lèi)的基類(lèi)基本流類(lèi)的基類(lèi); ; istreamistream - - 由由iosios派生,支持輸入派生,支持輸入( (提取提取“”)“”)操操作;作; ostreamostream - - 由由iosios派生

6、,支持輸出派生,支持輸出( (插入插入“”)“”)操操作;作; iostreamiostream - - 由由istreamistream與與ostreamostream共同派生,支持輸共同派生,支持輸入和輸出雙向操作。入和輸出雙向操作。 5 c+ c+預(yù)定義的流預(yù)定義的流有:有: extern extern istream istream cincin; - ; - 對(duì)象對(duì)象cincin對(duì)應(yīng)于對(duì)應(yīng)于鍵盤(pán)鍵盤(pán)文件文件 extern extern ostream ostream coutcout; - ; - 對(duì)象對(duì)象coutcout對(duì)應(yīng)于對(duì)應(yīng)于顯示器顯示器文件文件 extern extern

7、ostream ostream cerrcerr; - ; - 對(duì)象對(duì)象cerrcerr對(duì)應(yīng)于對(duì)應(yīng)于顯示器顯示器文件文件 extern extern ostreamostream clogclog; - ; - 對(duì)象對(duì)象clogclog對(duì)應(yīng)于對(duì)應(yīng)于顯示器顯示器文件文件 程序中可直接對(duì)上述程序中可直接對(duì)上述4 4個(gè)預(yù)定義流類(lèi)對(duì)象進(jìn)行讀寫(xiě),而不個(gè)預(yù)定義流類(lèi)對(duì)象進(jìn)行讀寫(xiě),而不必先進(jìn)行必先進(jìn)行“打開(kāi)文件打開(kāi)文件”的操作,使用完后也不需要進(jìn)行的操作,使用完后也不需要進(jìn)行“關(guān)關(guān)閉文件閉文件”的操作(因?yàn)檫@些流類(lèi)對(duì)象與文件之間的聯(lián)系是預(yù)的操作(因?yàn)檫@些流類(lèi)對(duì)象與文件之間的聯(lián)系是預(yù)定義好的,可認(rèn)為系統(tǒng)已為每一

8、程序都隱含進(jìn)行了對(duì)它們的定義好的,可認(rèn)為系統(tǒng)已為每一程序都隱含進(jìn)行了對(duì)它們的打開(kāi)與關(guān)閉操作)。打開(kāi)與關(guān)閉操作)。 6 4. c+ 4. c+的文件流類(lèi)系統(tǒng)的文件流類(lèi)系統(tǒng) 在頭文件在頭文件“fstreamfstream.h”.h”中說(shuō)明中說(shuō)明( (預(yù)定義預(yù)定義) )了一批了一批文件流文件流類(lèi)類(lèi),專(zhuān)用于,專(zhuān)用于磁盤(pán)文件磁盤(pán)文件: : ifstreamifstream - - 由由istreamistream派生,支持從磁盤(pán)文件中輸入派生,支持從磁盤(pán)文件中輸入( (讀入讀入) )數(shù)據(jù);數(shù)據(jù); ofstreamofstream - - 由由ostreamostream派生,支持往磁盤(pán)文件中輸出派生,支

9、持往磁盤(pán)文件中輸出( (寫(xiě)出寫(xiě)出) )數(shù)據(jù);數(shù)據(jù); fstreamfstream - - 由由iostreamiostream派生,支持對(duì)磁盤(pán)文件進(jìn)行派生,支持對(duì)磁盤(pán)文件進(jìn)行輸入和輸出數(shù)據(jù)的雙向操作。輸入和輸出數(shù)據(jù)的雙向操作。 c+c+中沒(méi)有預(yù)定義的文件流中沒(méi)有預(yù)定義的文件流( (類(lèi)對(duì)象類(lèi)對(duì)象) ),程序中用到的所,程序中用到的所有文件流類(lèi)對(duì)象都要進(jìn)行自定義。有文件流類(lèi)對(duì)象都要進(jìn)行自定義。7* *10.2 10.2 插入與提取運(yùn)算符的重載插入與提取運(yùn)算符的重載 - - 參看書(shū)參看書(shū)p231, 10.1p231, 10.1節(jié)后半節(jié)后半對(duì)自定義類(lèi)對(duì)自定義類(lèi)complexcomplex重載輸入輸出運(yùn)

10、算符重載輸入輸出運(yùn)算符“”“”“”:#includeclass complex double r; double i;public:complex(double r0=0, double i0=0) r=r0; i=i0; complex operator +(complex c2); complex operator *(complex c2); friend istream& operator (istream& in, complex& com); friend ostream& operator ”operator”用于完成從用于完成從istreamistream類(lèi)的流類(lèi)對(duì)象類(lèi)的流類(lèi)對(duì)

11、象inin上(如對(duì)上(如對(duì)應(yīng)實(shí)參可為應(yīng)實(shí)參可為cincin,即指定從鍵盤(pán)上)輸入一個(gè)復(fù)數(shù)的有關(guān)數(shù)據(jù)放入即指定從鍵盤(pán)上)輸入一個(gè)復(fù)數(shù)的有關(guān)數(shù)據(jù)放入complexcomplex型引用對(duì)象型引用對(duì)象comcom中;而中;而“operator”operator”則用于實(shí)現(xiàn)往則用于實(shí)現(xiàn)往ostreamostream類(lèi)的流類(lèi)對(duì)象類(lèi)的流類(lèi)對(duì)象outout上(如對(duì)應(yīng)實(shí)參可為上(如對(duì)應(yīng)實(shí)參可為coutcout,即指定往屏幕上)輸出即指定往屏幕上)輸出complexcomplex類(lèi)對(duì)象類(lèi)對(duì)象comcom的的有關(guān)數(shù)據(jù)。有關(guān)數(shù)據(jù)。 3.3. 本程序重載的輸入輸出運(yùn)算符的返回類(lèi)型均為引用,為的是可使用本程序重載的輸入輸

12、出運(yùn)算符的返回類(lèi)型均為引用,為的是可使用返回結(jié)果繼續(xù)作左值,也即使返回結(jié)果能起到一個(gè)獨(dú)立對(duì)象(變量)的作返回結(jié)果繼續(xù)作左值,也即使返回結(jié)果能起到一個(gè)獨(dú)立對(duì)象(變量)的作用,從而可使用像用,從而可使用像“coutcoutc1c2;”c1c1c2;”c1c2;”這樣的調(diào)用語(yǔ)這樣的調(diào)用語(yǔ)句。另外,句。另外,“operator ”operator ”的第二形參的第二形參comcom也必須被說(shuō)明成引用也必須被說(shuō)明成引用“complex& com”complex& com”,目的則是要將輸入數(shù)據(jù)直接賦值給對(duì)應(yīng)實(shí)參變量(所目的則是要將輸入數(shù)據(jù)直接賦值給對(duì)應(yīng)實(shí)參變量(所擁有的存儲(chǔ)空間中)。擁有的存儲(chǔ)空間中)。

13、9 complex complex:operator +(complex c2) complex c;c.r=r+c2.r;c.i=i+c2.i;return c; complex complex:operator * (complex c2) complex temp;temp.r=(r*c2.r)-(i*c2.i);temp.i=(r*c2.i)+(i*c2.r);return temp;10istream& operator (istream& in, complex& com) incom.rcom.i;return in; /不可缺少,因?yàn)楹瘮?shù)返回類(lèi)型為不可缺少,因?yàn)楹瘮?shù)返回類(lèi)型為“

14、istream&” ostream& operator (ostream& out, complex com) out(com.r, com.i)endl;return out; /不可缺少,因?yàn)楹瘮?shù)返回類(lèi)型為不可缺少,因?yàn)楹瘮?shù)返回類(lèi)型為“ostream&”void main() complex c1(1,1), c2(2,3), c3, res;coutc1=c1c2=c2;res = c1+c2;coutc1+c2=res;coutc1*c2=c1*c2;11 coutc3; coutc3+c3=c3+c3; /* 注意輸入輸出語(yǔ)句中出現(xiàn)的注意輸入輸出語(yǔ)句中出現(xiàn)的類(lèi)對(duì)象類(lèi)對(duì)象cout以及以

15、及cin正是正是輸輸入輸出重載函數(shù)中入輸出重載函數(shù)中引用型形參引用型形參out以及以及in的對(duì)應(yīng)實(shí)參的對(duì)應(yīng)實(shí)參。即是說(shuō),。即是說(shuō),若使用若使用“coutc1;”它將等同于它將等同于“operatorc3;”則等同于使用則等同于使用“operator(cin, c3);”。 */ 程序執(zhí)行后,屏幕顯示結(jié)果為:程序執(zhí)行后,屏幕顯示結(jié)果為: c1=(1, 1)c2=(2, 3)c1+c2=(3, 4)c1*c2=(-1, 5)input c3:3 -5c3+c3=(6, -10)1210.3 10.3 對(duì)輸入輸出格式進(jìn)行控制對(duì)輸入輸出格式進(jìn)行控制10.3.1 10.3.1 格式控制函數(shù)及格式控制符格

16、式控制函數(shù)及格式控制符 10.3.2 10.3.2 輸入輸出格式控制示例輸入輸出格式控制示例 1310.3.1 10.3.1 格式控制函數(shù)及格式控制符格式控制函數(shù)及格式控制符 - - 參看書(shū)參看書(shū)p234, 10.4p234, 10.4節(jié)節(jié) 1. 1. iosios類(lèi)中常用的公有格式控制成員函數(shù)類(lèi)中常用的公有格式控制成員函數(shù) 在在iosios類(lèi)中定義了一批公有的類(lèi)中定義了一批公有的格式控制標(biāo)志位格式控制標(biāo)志位以及一些以及一些成員函數(shù),通常先用某些成員函數(shù)來(lái)設(shè)置標(biāo)志位,然后再使成員函數(shù),通常先用某些成員函數(shù)來(lái)設(shè)置標(biāo)志位,然后再使用另一些成員函數(shù)來(lái)進(jìn)行格式輸出。另外,用另一些成員函數(shù)來(lái)進(jìn)行格式輸出

17、。另外,iosios類(lèi)中還設(shè)置了類(lèi)中還設(shè)置了一個(gè)一個(gè)longlong型的數(shù)據(jù)成員用來(lái)記錄當(dāng)前被設(shè)置的格式狀態(tài),該型的數(shù)據(jù)成員用來(lái)記錄當(dāng)前被設(shè)置的格式狀態(tài),該數(shù)據(jù)成員被稱(chēng)為數(shù)據(jù)成員被稱(chēng)為格式控制標(biāo)志字格式控制標(biāo)志字( (或標(biāo)志狀態(tài)字或標(biāo)志狀態(tài)字) )。標(biāo)志字是。標(biāo)志字是由格式控制標(biāo)志位來(lái)由格式控制標(biāo)志位來(lái)“合成合成”的。的。 注意,注意,iosios類(lèi)作為諸多類(lèi)作為諸多i/oi/o流類(lèi)的基類(lèi),其公有成員函數(shù)流類(lèi)的基類(lèi),其公有成員函數(shù)當(dāng)然可被各派生類(lèi)的對(duì)象所直接調(diào)用。當(dāng)然可被各派生類(lèi)的對(duì)象所直接調(diào)用。14 (1) (1) iosios:flags:flags a.a. 格式一格式一: : long

18、 flags( long long flags( long lflagslflags ); ); 通過(guò)參數(shù)通過(guò)參數(shù)lflagslflags來(lái)重新設(shè)置來(lái)重新設(shè)置標(biāo)志字標(biāo)志字。 表示各表示各標(biāo)志位標(biāo)志位的枚舉常量有的枚舉常量有( (參看參看p235)p235):iosios:skipwsskipwsiosios:left :left iosios:right :right .iosios:stdiostdio 每一枚舉常量值都代表著格式控制標(biāo)志字中的某一個(gè)二每一枚舉常量值都代表著格式控制標(biāo)志字中的某一個(gè)二進(jìn)制位進(jìn)制位( (bit)bit),當(dāng)設(shè)置了某個(gè)標(biāo)志位屬性時(shí),該位將取值當(dāng)設(shè)置了某個(gè)標(biāo)志位屬性

19、時(shí),該位將取值“1”“1”,否則該位取值,否則該位取值“0”“0”。 15 另外注意,通過(guò)另外注意,通過(guò)使用位運(yùn)算符使用位運(yùn)算符“|”“|”可將多個(gè)格式控制可將多個(gè)格式控制標(biāo)志位屬性進(jìn)行標(biāo)志位屬性進(jìn)行“合成合成”。但從使用角度看,。但從使用角度看,所設(shè)置的標(biāo)所設(shè)置的標(biāo)志位屬性不能產(chǎn)生互斥志位屬性不能產(chǎn)生互斥。例如,格式控制標(biāo)志字中設(shè)立了。例如,格式控制標(biāo)志字中設(shè)立了三個(gè)平行的標(biāo)志位三個(gè)平行的標(biāo)志位( (iosios:decdec、iosios:octoct和和iosios:hex):hex)用于用于表示數(shù)制,程序員應(yīng)保障任何時(shí)刻只設(shè)置其中的某一個(gè)標(biāo)表示數(shù)制,程序員應(yīng)保障任何時(shí)刻只設(shè)置其中的某一

20、個(gè)標(biāo)志位。還有表示對(duì)齊標(biāo)志位的志位。還有表示對(duì)齊標(biāo)志位的iosios:left:left、iosios:right:right和和i o si o s : : i n t e r n a l: : i n t e r n a l , 以 及 表 示 實(shí) 數(shù) 格 式 標(biāo) 志 位 的以 及 表 示 實(shí) 數(shù) 格 式 標(biāo) 志 位 的iosios:scientific:scientific和和iosios:fixed:fixed,這些互斥屬性也不能同時(shí)這些互斥屬性也不能同時(shí)設(shè)置。設(shè)置。 b.b. 格式二格式二: : long flags(); long flags(); 返回當(dāng)前的標(biāo)志字。返回當(dāng)前的標(biāo)志

21、字。 16 (2) (2) iosios:setfsetf a.a. 格式一格式一: : long long setfsetf( long ( long lflagslflags ); ); 通過(guò)參數(shù)通過(guò)參數(shù)lflagslflags來(lái)設(shè)置指定的格式控制標(biāo)志位。來(lái)設(shè)置指定的格式控制標(biāo)志位。 注意,與注意,與flagsflags函數(shù)的函數(shù)的“替換替換”方式不同,此處為方式不同,此處為“添加添加”方式,即是說(shuō),它并不更改其它方式,即是說(shuō),它并不更改其它lflagslflags不涉及到的那些標(biāo)不涉及到的那些標(biāo)志位的當(dāng)前值。志位的當(dāng)前值。 b.b. 格式二格式二: : long long setfset

22、f( long ( long lflagslflags, long , long lmasklmask ); ); 設(shè)置指定的格式控制標(biāo)志位的值(首先將第二參數(shù)設(shè)置指定的格式控制標(biāo)志位的值(首先將第二參數(shù)lmasklmask所指定的那些位清零,而后用第一參數(shù)所指定的那些位清零,而后用第一參數(shù)lflagslflags所給定的值來(lái)所給定的值來(lái)重置這些標(biāo)志位)。重置這些標(biāo)志位)。 17 例如,為保障所設(shè)置的數(shù)制標(biāo)志位不產(chǎn)生互斥,當(dāng)要設(shè)例如,為保障所設(shè)置的數(shù)制標(biāo)志位不產(chǎn)生互斥,當(dāng)要設(shè)置置16進(jìn)制時(shí)使用:進(jìn)制時(shí)使用: setf(ios:hex, ios:basefield); 其中的其中的ios:bas

23、efield為一個(gè)在為一個(gè)在ios類(lèi)中定義的公有靜態(tài)常類(lèi)中定義的公有靜態(tài)常量,它的取值為量,它的取值為ios:dec|ios:oct|ios:hex。 同理,當(dāng)要設(shè)置對(duì)齊標(biāo)志位為同理,當(dāng)要設(shè)置對(duì)齊標(biāo)志位為ios:right以及實(shí)數(shù)格式標(biāo)以及實(shí)數(shù)格式標(biāo)志位為志位為ios:fixed,要使用:要使用: setf(ios:right, ios:adjustfield); setf(ios:fixed, ios:floatfield); 其中用到了公有靜態(tài)常量其中用到了公有靜態(tài)常量ios:adjustfield和和ios:floatfield。 ios:adjustfield的取值為的取值為ios:l

24、eft|ios:right|ios:internal,而而ios:floatfield的取值為的取值為ios:scientific|ios:fixed。 18 (3) (3) iosios:unsetfunsetf long long unsetfunsetf( long ( long lflagslflags ); ); 通過(guò)參數(shù)通過(guò)參數(shù)lflagslflags來(lái)清除指定的格式控制標(biāo)志位。來(lái)清除指定的格式控制標(biāo)志位。 (4) (4) iosios:fill:fill char fill( char char fill( char cfillcfill ); ); 將將“填充字符填充字符”設(shè)置

25、為設(shè)置為cfillcfill, , 并返回原并返回原“填充字填充字符符”。 19(5) (5) iosios:precision:precision intint precision( precision( int npint np ); ); 設(shè)置浮點(diǎn)數(shù)精度為設(shè)置浮點(diǎn)數(shù)精度為npnp并返回原精度。當(dāng)格式為并返回原精度。當(dāng)格式為iosios:scientific:scientific或或iosios:fixed:fixed時(shí),精度時(shí),精度npnp指小數(shù)點(diǎn)后的位指小數(shù)點(diǎn)后的位數(shù),否則指有效數(shù)字。數(shù),否則指有效數(shù)字。 (6) (6) iosios:width:width intint width(

26、 width( int nwint nw ); ); 設(shè)置當(dāng)前被顯示數(shù)據(jù)的域?qū)捲O(shè)置當(dāng)前被顯示數(shù)據(jù)的域?qū)抧wnw并返回原域?qū)?。默認(rèn)值并返回原域?qū)?。默認(rèn)值為為0 0,將按實(shí)際需要的域?qū)掃M(jìn)行輸出。此設(shè)置只對(duì)隨后的一,將按實(shí)際需要的域?qū)掃M(jìn)行輸出。此設(shè)置只對(duì)隨后的一個(gè)數(shù)據(jù)有效,而后系統(tǒng)立刻恢復(fù)域?qū)挒橄到y(tǒng)默認(rèn)值個(gè)數(shù)據(jù)有效,而后系統(tǒng)立刻恢復(fù)域?qū)挒橄到y(tǒng)默認(rèn)值0 0。20 2. 2. 常用的輸入輸出格式控制符常用的輸入輸出格式控制符 可直接用于提取和插入算符可直接用于提取和插入算符(“”(“”和和“”)“”)之后,而之后,而不像格式控制成員函數(shù)那樣必須被單獨(dú)調(diào)用。不像格式控制成員函數(shù)那樣必須被單獨(dú)調(diào)用。 (1)

27、 (1) iostreamiostream.h.h中含有的無(wú)參格式控制符中含有的無(wú)參格式控制符( (參看參看p237)p237): . . endlendl. ends. ends. flush. flush. . wsws. . decdec. hex. hex. . octoct21 (2) (2) iomanipiomanip.h.h中含有的有參格式控制符中含有的有參格式控制符( (參看參看p237)p237): . . setbasesetbase( ( intint base ) base ). . resetiosflagsresetiosflags( long ( long lf

28、lagslflags ) ). . setiosflagssetiosflags( long ( long lflagslflags ) ). . setfillsetfill( char ( char cfillcfill ) ). . setprecisionsetprecision( ( int npint np ) ). . setwsetw( ( int nwint nw ) )22 10.3.2 10.3.2 輸入輸出格式控制示例輸入輸出格式控制示例 1. 格式控制示例一格式控制示例一 ( flags和和setf等函數(shù)的功能等函數(shù)的功能) #include void main()

29、coutios basefield; /輸出:輸出:112 cout (ios:dec|ios:oct|ios:hex)endl; /輸出:輸出:112 coutios:adjustfield; /輸出:輸出:14 cout (ios:left|ios:right|ios:internal)endl; /輸出:輸出:14 coutios:floatfield; /輸出:輸出:6144 cout (ios:scientific|ios:fixed)endl; /輸出:輸出:614423/flags將重新設(shè)置標(biāo)志字,將重新設(shè)置標(biāo)志字,“替換替換”方式方式 cout.flags(ios:showba

30、se); coutcout.flags()endl; /輸出:輸出:128 cout.flags(ios:showpoint); coutcout.flags()endl; /輸出:輸出:256 cout.unsetf(ios:showpoint); coutcout.flags()endl; /輸出:輸出:0 /setf為為“添加添加”方式方式 cout.setf(ios:showbase); coutcout.flags()endl; /輸出:輸出:128 cout.setf(ios:showpoint); coutcout.flags()endl; /輸出:輸出:384 cout.uns

31、etf(ios:showpoint); coutcout.flags()endl; /輸出:輸出:128 242. 格式控制示例二格式控制示例二 對(duì)輸出數(shù)據(jù)的寬度、精度等方面進(jìn)行設(shè)置與使用。對(duì)輸出數(shù)據(jù)的寬度、精度等方面進(jìn)行設(shè)置與使用。#include void main() cout.width(6); /只管隨后一個(gè)數(shù)的域?qū)捴还茈S后一個(gè)數(shù)的域?qū)?cout478527.4272endl; / 478527.4272coutsetw(6)4785setw(8)27.4272endlendl; / 4785 27.4272cout.width(6);cout.precision(3); /當(dāng)格式為

32、當(dāng)格式為ios:scientific或或ios:fixed時(shí),浮點(diǎn)數(shù)精度時(shí),浮點(diǎn)數(shù)精度 /np指小數(shù)點(diǎn)后的位數(shù),否則指有效數(shù)字指小數(shù)點(diǎn)后的位數(shù),否則指有效數(shù)字 /此時(shí)設(shè)置浮點(diǎn)數(shù)的有效數(shù)字為此時(shí)設(shè)置浮點(diǎn)數(shù)的有效數(shù)字為3cout4785setw(8)27.4272endl; / 4785 27.4 25coutsetw(6)4785setw(8)setprecision(2)27.4272endlendl; / 4785 27 /“setprecision(2)”設(shè)置浮點(diǎn)數(shù)的有效數(shù)字設(shè)置浮點(diǎn)數(shù)的有效數(shù)字cout.setf(ios:fixed, ios:floatfield); /今后以定點(diǎn)格式顯示

33、浮點(diǎn)數(shù)今后以定點(diǎn)格式顯示浮點(diǎn)數(shù)(無(wú)指數(shù)部分無(wú)指數(shù)部分)cout.width(6); cout.precision(3); /當(dāng)格式為當(dāng)格式為ios:fixed時(shí),設(shè)置小數(shù)點(diǎn)后的位數(shù)時(shí),設(shè)置小數(shù)點(diǎn)后的位數(shù)cout4785setw(8)27.4272 = 讀寫(xiě)操作讀寫(xiě)操作 = = 關(guān)閉文件關(guān)閉文件。 27 “打開(kāi)文件打開(kāi)文件”通常通過(guò)構(gòu)造函數(shù)自動(dòng)完成(也可顯式調(diào)通常通過(guò)構(gòu)造函數(shù)自動(dòng)完成(也可顯式調(diào)用成員函數(shù)用成員函數(shù)openopen完成)。完成)?!瓣P(guān)閉文件關(guān)閉文件”通常通過(guò)使用通常通過(guò)使用“.close();”close();”來(lái)顯式完成。來(lái)顯式完成。 例例1: 1: ofstreamofstr

34、eam outfile1(myfile1.txt); outfile1(myfile1.txt); 創(chuàng)建創(chuàng)建ofstreamofstream類(lèi)的對(duì)象類(lèi)的對(duì)象outfile1outfile1;使流類(lèi)對(duì)象使流類(lèi)對(duì)象outfile1outfile1與與磁盤(pán)文件磁盤(pán)文件 myfile1.txtmyfile1.txt相聯(lián)系;并打開(kāi)用于相聯(lián)系;并打開(kāi)用于“寫(xiě)寫(xiě)”的磁盤(pán)的磁盤(pán)文件文件 myfile1.txtmyfile1.txt。 例例2: 2: ofstreamofstream outfile1; outfile1; / /創(chuàng)建創(chuàng)建ofstreamofstream類(lèi)的對(duì)象類(lèi)的對(duì)象outfile1outfi

35、le1 outfile1.open(myfile1.txt); outfile1.open(myfile1.txt); / /顯式調(diào)用成員函數(shù)顯式調(diào)用成員函數(shù)openopen來(lái)打開(kāi)文件來(lái)打開(kāi)文件28 二二. 與創(chuàng)建流類(lèi)對(duì)象相關(guān)的三個(gè)構(gòu)造函數(shù)與創(chuàng)建流類(lèi)對(duì)象相關(guān)的三個(gè)構(gòu)造函數(shù) 1. ifstream:ifstream ifstream( const char* szname, int nmode = ios:in, int nprot = filebuf:openprot ); 參數(shù)參數(shù): (1) szname - 文件名;文件名; (2) nmode - 打開(kāi)文件的方式。打開(kāi)文件的方式。 ios

36、:in - 以讀以讀(輸入輸入)為目的打開(kāi)。為目的打開(kāi)。 ios:nocreate - 僅打開(kāi)一個(gè)已存在文件。僅打開(kāi)一個(gè)已存在文件。 ios:binary - 打開(kāi)二進(jìn)制文件。打開(kāi)二進(jìn)制文件。 (3) nprot - 指定所打開(kāi)文件的保護(hù)方式。指定所打開(kāi)文件的保護(hù)方式。29 2. ofstream:ofstream ofstream( const char* szname, int nmode = ios:out, int nprot = filebuf:openprot ); 參數(shù)參數(shù): (1) szname - 文件名;文件名; (2) nmode - 打開(kāi)文件的方式。打開(kāi)文件的方式。 i

37、os:out - 以寫(xiě)以寫(xiě)(輸出輸出)為目的打開(kāi)文件。為目的打開(kāi)文件。 ios:trunc - 若文件存在,則將文件長(zhǎng)度截為若文件存在,則將文件長(zhǎng)度截為0。 ios:binary - 打開(kāi)二進(jìn)制文件。打開(kāi)二進(jìn)制文件。 ios:app - 以追加方式打開(kāi)。以追加方式打開(kāi)。 . (3) nprot - 指定所打開(kāi)文件的保護(hù)方式。指定所打開(kāi)文件的保護(hù)方式。 30 3. fstream:fstream fstream( const char* szname, int nmode, int nprot = filebuf:openprot ); 參數(shù)含義和用法與參數(shù)含義和用法與ofstream構(gòu)造函數(shù)處

38、相同。構(gòu)造函數(shù)處相同。 三三. 與創(chuàng)建流類(lèi)對(duì)象相關(guān)的三個(gè)與創(chuàng)建流類(lèi)對(duì)象相關(guān)的三個(gè)open函數(shù)函數(shù) 1. ofstream:open void open( const char* szname, int nmode = ios:out, int nprot = filebuf:openprot ); 2. ifstream:open void open( const char* szname, int nmode = ios:in, int nprot = filebuf:openprot ); 3. fstream:open void open( const char* szname, int

39、 nmode, int nprot = filebuf:openprot ); 3110.4.2 讀寫(xiě)操作示例讀寫(xiě)操作示例 - - 參看書(shū)參看書(shū)p246, 10.6.2p246, 10.6.2小節(jié)的小節(jié)的1 1 對(duì)文件的對(duì)文件的“讀寫(xiě)操作讀寫(xiě)操作”通常使用預(yù)定義的通常使用預(yù)定義的類(lèi)成員函數(shù)類(lèi)成員函數(shù)來(lái)實(shí)現(xiàn)(隨后介紹),但也可使用繼承而來(lái)的來(lái)實(shí)現(xiàn)(隨后介紹),但也可使用繼承而來(lái)的插入和提取運(yùn)插入和提取運(yùn)算符算符“”“”和和“”“”operator ”,所以,所以,ifstreamifstream流(類(lèi)對(duì)象)可以使用預(yù)定義的算符流(類(lèi)對(duì)象)可以使用預(yù)定義的算符“”“”來(lái)對(duì)自來(lái)對(duì)自定義磁盤(pán)文件進(jìn)行定

40、義磁盤(pán)文件進(jìn)行“讀讀”操作(允許通過(guò)派生類(lèi)對(duì)象直接調(diào)操作(允許通過(guò)派生類(lèi)對(duì)象直接調(diào)用其基類(lèi)的公有成員函數(shù));用其基類(lèi)的公有成員函數(shù)); ofstreamofstream類(lèi)由類(lèi)由ostreamostream類(lèi)所派生類(lèi)所派生,而,而ostreamostream類(lèi)中預(yù)定義類(lèi)中預(yù)定義了公有的運(yùn)算符了公有的運(yùn)算符重載函數(shù)重載函數(shù)“operator ”operator ”,所以,所以,ofstreamofstream流(類(lèi)對(duì)象)可以使用預(yù)定義的算符流(類(lèi)對(duì)象)可以使用預(yù)定義的算符“”“”“”和和“”“”來(lái)對(duì)自定義磁盤(pán)文件進(jìn)行來(lái)對(duì)自定義磁盤(pán)文件進(jìn)行“讀讀” ” 與與“寫(xiě)寫(xiě)”操作。操作。 還有一點(diǎn)需要注意:使

41、用預(yù)定義的算符還有一點(diǎn)需要注意:使用預(yù)定義的算符“”“”“”來(lái)進(jìn)行來(lái)進(jìn)行“讀讀”操作操作時(shí)遇空格或換行均結(jié)束一個(gè)數(shù)據(jù)相呼應(yīng)。時(shí)遇空格或換行均結(jié)束一個(gè)數(shù)據(jù)相呼應(yīng)。 下述下述示例程序示例程序做了如下的做了如下的3 3件事:件事:1)1) 往文件寫(xiě)數(shù)據(jù);往文件寫(xiě)數(shù)據(jù);2)2) 往文件尾部追加數(shù)據(jù);往文件尾部追加數(shù)據(jù); 3)3) 從文件讀出數(shù)據(jù)并顯示在屏幕上。從文件讀出數(shù)據(jù)并顯示在屏幕上。 33#include void main() /1) 往文件寫(xiě)數(shù)據(jù)往文件寫(xiě)數(shù)據(jù)ofstream outfile1(myfile1.txt); /以以“寫(xiě)寫(xiě)”方式打開(kāi)方式打開(kāi)outfile1hello!.china!

42、 nankai_universityendl; outfile1.close(); /2) 往文件尾部追加數(shù)據(jù)往文件尾部追加數(shù)據(jù) outfile1.open(myfile1.txt, ios:app); /以以“追加追加”方式打開(kāi)方式打開(kāi)int x=1212, y=6868;outfile1x ystr1str2; /使用使用“”讀讀(遇空格、換行均結(jié)束遇空格、換行均結(jié)束)infile1x2y2;infile1.close(); 34coutstr1=str1endl;coutstr2=str2endl;coutx2=x2endl;couty2=y2endl; 程序執(zhí)行后的顯示結(jié)果如下:程序執(zhí)

43、行后的顯示結(jié)果如下:str1=hello!.china!str2=nankai_universityx2=1212y2=686835 10.5 10.5 使用類(lèi)成員函數(shù)對(duì)文件流進(jìn)行操作使用類(lèi)成員函數(shù)對(duì)文件流進(jìn)行操作10.5.1 10.5.1 類(lèi)成員函數(shù)類(lèi)成員函數(shù)getget與與putput10.5.2 10.5.2 類(lèi)成員函數(shù)類(lèi)成員函數(shù)readread與與writewrite10.5.3 10.5.3 類(lèi)成員函數(shù)類(lèi)成員函數(shù)getlinegetline 3610.5.1 10.5.1 類(lèi)成員函數(shù)類(lèi)成員函數(shù)getget與與putput- - 參看書(shū)參看書(shū)p247, 10.6.2p247, 10.6

44、.2小節(jié)的小節(jié)的2 2 ostreamostream& put( char & put( char chch ); );功能:將字符功能:將字符chch寫(xiě)到自定義文件中。寫(xiě)到自定義文件中。 istreamistream& get( char& & get( char& rchrch ); );功能:從自定義文件中讀出功能:從自定義文件中讀出1 1個(gè)字符放入引用個(gè)字符放入引用rchrch中。中。 注意,注意,putput實(shí)際上只是實(shí)際上只是ostreamostream類(lèi)中定義的公有成員類(lèi)中定義的公有成員函數(shù),當(dāng)然通過(guò)其派生類(lèi)函數(shù),當(dāng)然通過(guò)其派生類(lèi)ofstreamofstream的類(lèi)對(duì)象也可以直接

45、的類(lèi)對(duì)象也可以直接對(duì)它進(jìn)行調(diào)用。同理,通過(guò)對(duì)它進(jìn)行調(diào)用。同理,通過(guò)ifstreamifstream的類(lèi)對(duì)象可以直接的類(lèi)對(duì)象可以直接調(diào)用調(diào)用getget。37 1. 程序示例一程序示例一 從鍵盤(pán)輸入任一個(gè)字符串,通過(guò)從鍵盤(pán)輸入任一個(gè)字符串,通過(guò)put將其寫(xiě)到自定義磁盤(pán)文件將其寫(xiě)到自定義磁盤(pán)文件“putgetfile.txt”中,而后再使用中,而后再使用get從該文件中讀出所寫(xiě)串并顯示在屏幕上。從該文件中讀出所寫(xiě)串并顯示在屏幕上。 #include #include void main() /鍵盤(pán)輸入字符串,通過(guò)鍵盤(pán)輸入字符串,通過(guò)put將其寫(xiě)到自定義磁盤(pán)文件中將其寫(xiě)到自定義磁盤(pán)文件中char s

46、tr80;coutinput string:endl;gets(str);ofstream fout(putgetfile.txt); int i=0;while ( stri ) fout.put(stri+); fout.close();cout-endl;38 /而后使用而后使用get從文件中讀出該串顯示在屏幕上從文件中讀出該串顯示在屏幕上char ch;ifstream fin(putgetfile.txt); fin.get(ch);while(!fin.eof() /從頭讀到文件結(jié)束從頭讀到文件結(jié)束(當(dāng)前符號(hào)非文件結(jié)束符時(shí)繼續(xù)當(dāng)前符號(hào)非文件結(jié)束符時(shí)繼續(xù)) /注注: 成員函數(shù)成員函數(shù)

47、eof()在讀到文件結(jié)束時(shí)方返回在讀到文件結(jié)束時(shí)方返回true coutch; fin.get(ch);coutendl;fin.close(); 程序執(zhí)行后的顯示結(jié)果如下:程序執(zhí)行后的顯示結(jié)果如下:input string:file operating - using put and get, ok! 12345-file operating - using put and get, ok! 1234539 2. 程序示例二程序示例二 - 對(duì)指定文件進(jìn)行拷貝對(duì)指定文件進(jìn)行拷貝 使用類(lèi)成員函數(shù)使用類(lèi)成員函數(shù)get與與put對(duì)指定文件進(jìn)行拷貝。被拷貝對(duì)指定文件進(jìn)行拷貝。被拷貝的的“源文件源文件”

48、以及拷貝到的以及拷貝到的“目的文件目的文件”的名字與路徑均由的名字與路徑均由命令行參數(shù)來(lái)提供。命令行參數(shù)來(lái)提供。 程序執(zhí)行結(jié)果程序執(zhí)行結(jié)果(若提供的命令行參數(shù)為若提供的命令行參數(shù)為:mycopy.cpp res_1.cpp): copy file from mycopy.cpp to res_1.cpp 程序執(zhí)行結(jié)果程序執(zhí)行結(jié)果(若提供的命令行參數(shù)個(gè)數(shù)不對(duì)時(shí)若提供的命令行參數(shù)個(gè)數(shù)不對(duì)時(shí)):error ! - supplying 2 command-line argements ?!40 #include #include void main(int argc, char* argv) if(a

49、rgc!=3) /命令行參數(shù)個(gè)數(shù)不對(duì)時(shí)命令行參數(shù)個(gè)數(shù)不對(duì)時(shí) couterror ! - supplying 2 command-line argements ?!endl; exit (1); coutcopy file from argv1 to argv2endl; ifstream fin(argv1); /命令行參數(shù)命令行參數(shù)1作為文件名作為文件名 ofstream fout(argv2); /命令行參數(shù)命令行參數(shù)2作為文件名作為文件名 char ch; fin.get(ch); while(!fin.eof() /從頭讀到文件結(jié)束從頭讀到文件結(jié)束 fout.put(ch); fin.

50、get(ch); fin.close(); fout.close(); 4110.5.2 10.5.2 類(lèi)成員函數(shù)類(lèi)成員函數(shù)readread與與write write - - 參看書(shū)參看書(shū)p247, 10.6.2p247, 10.6.2小節(jié)的小節(jié)的2 2 通常使用通常使用read與與write對(duì)二進(jìn)制文件對(duì)二進(jìn)制文件(binary file)進(jìn)行讀寫(xiě)。進(jìn)行讀寫(xiě)。 ostream& write( const char* pch, int ncount ); 功能:將功能:將pch緩沖區(qū)中的前緩沖區(qū)中的前ncount個(gè)字符寫(xiě)出到某個(gè)文件中。個(gè)字符寫(xiě)出到某個(gè)文件中。istream& read( ch

51、ar* pch, int ncount ); 功能:從某個(gè)文件中讀入功能:從某個(gè)文件中讀入ncount個(gè)字符放入個(gè)字符放入pch緩沖區(qū)中緩沖區(qū)中(若讀至文件結(jié)束尚不足(若讀至文件結(jié)束尚不足ncount個(gè)字符時(shí),也將立即結(jié)束個(gè)字符時(shí),也將立即結(jié)束本次讀取過(guò)程)。本次讀取過(guò)程)。 注意:使用注意:使用write與與read進(jìn)行數(shù)據(jù)讀寫(xiě)時(shí),不必要在數(shù)據(jù)進(jìn)行數(shù)據(jù)讀寫(xiě)時(shí),不必要在數(shù)據(jù)間再額外間再額外“插入插入”分割符,這是因?yàn)樗鼈兌家筇峁┑诙指罘?,這是因?yàn)樗鼈兌家筇峁┑诙?shí)參來(lái)指定讀寫(xiě)長(zhǎng)度。實(shí)參來(lái)指定讀寫(xiě)長(zhǎng)度。42 以下的示例程序先使用以下的示例程序先使用write往自定義二進(jìn)制磁盤(pán)文件往自定義二

52、進(jìn)制磁盤(pán)文件中寫(xiě)出如下中寫(xiě)出如下3個(gè)個(gè)“值值”:字符串:字符串str的長(zhǎng)度值的長(zhǎng)度值len(一個(gè)正整一個(gè)正整數(shù)數(shù))、字符串、字符串str本身、以及一個(gè)結(jié)構(gòu)體的數(shù)據(jù),而后再使用本身、以及一個(gè)結(jié)構(gòu)體的數(shù)據(jù),而后再使用read讀出這些讀出這些“值值”并將它們顯示在屏幕上并將它們顯示在屏幕上。 #include #include void main() char str20=hello world!;struct stuchar name20;int age;double score; ss=wu jun, 22, 91.5; 43 coutwrite to wrt_read_file.binendl

53、;ofstream fout(wrt_read_file.bin, ios:binary); /打開(kāi)用于打開(kāi)用于“寫(xiě)寫(xiě)”的二進(jìn)制磁盤(pán)文件的二進(jìn)制磁盤(pán)文件int len=strlen(str);fout.write( (char*)(&len), sizeof(int) ); fout.write(str, len); /數(shù)據(jù)間無(wú)需分割符數(shù)據(jù)間無(wú)需分割符fout.write(char*)(&ss), sizeof(ss); fout.close();cout-endl;cout- read it from wrt_read_file.bin -endl;char str280;ifstream

54、fin(wrt_read_file.bin, ios:binary); fin.read( (char*)(&len), sizeof(int) );fin.read(str2, len);str2len=0; 44 fin.read( (char*)(&ss), sizeof(ss) ); coutlen=lenendl; coutstr2=str2endl; ,ss.age,ss.scoreendl; fin.close(); cout-wu jun,22,91.5-45 最常用格式為:最常用格式為:istream& getline( char* pch, int n

55、count, char delim = n ); 功能:從某個(gè)文件中讀出一行功能:從某個(gè)文件中讀出一行(至多至多ncount個(gè)字符個(gè)字符)放入放入pch緩沖區(qū)中,缺省行結(jié)束符為緩沖區(qū)中,缺省行結(jié)束符為n。 程序?qū)嵗绦驅(qū)嵗? 讀出讀出“getline_1.cpp”的各行并顯示在屏幕上(如,可的各行并顯示在屏幕上(如,可將本源程序存放在將本源程序存放在“getline_1.cpp“文件中)。文件中)。 10.5.3 10.5.3 類(lèi)成員函數(shù)類(lèi)成員函數(shù)getline getline - - 注,書(shū)中沒(méi)介紹該函數(shù)注,書(shū)中沒(méi)介紹該函數(shù) 46 #include void main() char line

56、81; ifstream infile(“getline_1.cpp”); /打開(kāi)文件用于讀打開(kāi)文件用于讀 infile.getline(line, 80); /讀出一行讀出一行(至多至多80個(gè)字符個(gè)字符)放入放入line中中 while(!infile.eof() /尚未讀到文件結(jié)束則繼續(xù)循環(huán)尚未讀到文件結(jié)束則繼續(xù)循環(huán)(處理處理) coutlineendl; /顯示在屏幕上顯示在屏幕上 infile.getline(line,80); /再讀一行再讀一行 infile.close();47 10.6 text文件與文件與binary文件文件10.6.1 對(duì)對(duì)text文件與文件與binary文

57、件的一般使用示例文件的一般使用示例10.6.2 采用采用binary文件形式對(duì)結(jié)構(gòu)體數(shù)據(jù)文件形式對(duì)結(jié)構(gòu)體數(shù)據(jù)進(jìn)行存儲(chǔ)與讀寫(xiě)處理進(jìn)行存儲(chǔ)與讀寫(xiě)處理- 10.6.1 對(duì)對(duì)text文件與文件與binary文件的一般使用示例文件的一般使用示例 * 以以text形式存儲(chǔ)形式存儲(chǔ),優(yōu)點(diǎn)優(yōu)點(diǎn)是具有較高的兼容性。是具有較高的兼容性。缺點(diǎn)缺點(diǎn)是是存儲(chǔ)一批純數(shù)值信息時(shí),要在數(shù)據(jù)之間人為地添加分割符;存儲(chǔ)一批純數(shù)值信息時(shí),要在數(shù)據(jù)之間人為地添加分割符;輸入輸出過(guò)程中,系統(tǒng)要對(duì)內(nèi)外存的數(shù)據(jù)格式進(jìn)行相應(yīng)轉(zhuǎn)輸入輸出過(guò)程中,系統(tǒng)要對(duì)內(nèi)外存的數(shù)據(jù)格式進(jìn)行相應(yīng)轉(zhuǎn)換;另外換;另外text文件不便于對(duì)數(shù)據(jù)實(shí)行隨機(jī)訪問(wèn)。文件不便于對(duì)

58、數(shù)據(jù)實(shí)行隨機(jī)訪問(wèn)。48 * * 以以binarybinary形式存儲(chǔ)形式存儲(chǔ),優(yōu)點(diǎn)優(yōu)點(diǎn)是便于對(duì)數(shù)據(jù)實(shí)行隨機(jī)訪是便于對(duì)數(shù)據(jù)實(shí)行隨機(jī)訪問(wèn)(每一同類(lèi)型數(shù)據(jù)所占磁盤(pán)空間的大小均相同,不必在問(wèn)(每一同類(lèi)型數(shù)據(jù)所占磁盤(pán)空間的大小均相同,不必在數(shù)據(jù)之間人為地添加分割符);輸入輸出過(guò)程中,系統(tǒng)不數(shù)據(jù)之間人為地添加分割符);輸入輸出過(guò)程中,系統(tǒng)不對(duì)數(shù)據(jù)進(jìn)行任何轉(zhuǎn)換。對(duì)數(shù)據(jù)進(jìn)行任何轉(zhuǎn)換。缺點(diǎn)缺點(diǎn)是兼容性低。是兼容性低。 注:由程序員決定將數(shù)據(jù)存儲(chǔ)為注:由程序員決定將數(shù)據(jù)存儲(chǔ)為texttext文件或者文件或者binarybinary文文件兩種形式之一。件兩種形式之一。 缺省打開(kāi)方式時(shí),默認(rèn)為缺省打開(kāi)方式時(shí),默認(rèn)為t

59、exttext文件形式。若欲使用文件形式。若欲使用binarybinary文件形式,要將打開(kāi)方式設(shè)為文件形式,要將打開(kāi)方式設(shè)為“iosios:binary”:binary”。 通常將純文本信息(如字符串)以通常將純文本信息(如字符串)以texttext文件形式存儲(chǔ),文件形式存儲(chǔ),而將數(shù)值信息以而將數(shù)值信息以binarybinary文件形式存儲(chǔ)。文件形式存儲(chǔ)。 49 1. 1. 示例示例1 - 1 - 對(duì)兩種文件進(jìn)行操作對(duì)兩種文件進(jìn)行操作 將將a a數(shù)組中準(zhǔn)備好的數(shù)組中準(zhǔn)備好的8 8個(gè)個(gè)intint型數(shù)據(jù),分別通過(guò)算符型數(shù)據(jù),分別通過(guò)算符“”“”依次寫(xiě)出到依次寫(xiě)出到texttext文件文件ft.

60、txtft.txt之中(注意各數(shù)據(jù)在文件中之中(注意各數(shù)據(jù)在文件中“長(zhǎng)短長(zhǎng)短”不一,且數(shù)據(jù)間必須加入分割符)。而且還通過(guò)不一,且數(shù)據(jù)間必須加入分割符)。而且還通過(guò)使用類(lèi)成員函數(shù)使用類(lèi)成員函數(shù)writewrite將這相同的將這相同的8 8個(gè)個(gè)intint型數(shù)據(jù)依次寫(xiě)出到型數(shù)據(jù)依次寫(xiě)出到binarybinary文件文件fbfb.bin.bin之中(注意各數(shù)據(jù)在文件中之中(注意各數(shù)據(jù)在文件中“長(zhǎng)短長(zhǎng)短”相相同,且數(shù)據(jù)間不需要加入分割符)。同,且數(shù)據(jù)間不需要加入分割符)。 另外,程序中通過(guò)使用無(wú)參的成員函數(shù)另外,程序中通過(guò)使用無(wú)參的成員函數(shù)“tellptellp()”()”來(lái)來(lái)獲取當(dāng)前已寫(xiě)出到各文件的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論