C++備課講義第15章.ppt_第1頁(yè)
C++備課講義第15章.ppt_第2頁(yè)
C++備課講義第15章.ppt_第3頁(yè)
C++備課講義第15章.ppt_第4頁(yè)
C++備課講義第15章.ppt_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1,第15章 輸入輸出流,2,編譯系統(tǒng)已經(jīng)以運(yùn)算符或函數(shù)的形式做好了對(duì)標(biāo)準(zhǔn)外設(shè)(鍵盤(pán)、屏幕、打印機(jī)、文件)的接口,使用時(shí)只需按照要求的格式調(diào)用即可。,cinx; coutx;,cin.get(ch);,3,輸入輸出流(I/O Stream) C+語(yǔ)言的I/O系統(tǒng)向用戶(hù)提供一個(gè)統(tǒng)一的接口,使得程序的設(shè)計(jì)盡量與所訪問(wèn)的具體設(shè)備無(wú)關(guān),在用戶(hù)與設(shè)備之間提供了一個(gè)抽象的界面:輸入輸出流。,4,用標(biāo)準(zhǔn)流進(jìn)行輸入/輸出時(shí),系統(tǒng)自動(dòng)地完成數(shù)據(jù)類(lèi)型的轉(zhuǎn)換。對(duì)于輸入流,要將輸入的字符序列形式的數(shù)據(jù)變換成計(jì)算機(jī)內(nèi)部形式的數(shù)據(jù)(二進(jìn)制或ASCII)后,再賦給變量,變換后的格式由變量的類(lèi)型確定。對(duì)于輸出流,將要輸出的數(shù)

2、據(jù)變換成字符串形式后,送到輸出流(文件)中。,5,編譯系統(tǒng)已經(jīng)以運(yùn)算符或函數(shù)的形式做好了對(duì)標(biāo)準(zhǔn)外設(shè)(鍵盤(pán)、屏幕、打印機(jī)、文件)的接口,使用時(shí)只需按照要求的格式調(diào)用即可。,cinx; coutx;,cin.get(ch);,6,文件流 C+在頭文件fstream.h中定義了C+的文件流類(lèi)體系 ,當(dāng)程序中使用文件時(shí),要包含頭文件fstream.h 。,當(dāng)使用文件時(shí),在程序頭有:#include 其中定義了各種文件操作運(yùn)算符及函數(shù)。,7,程序?qū)ξ谋疚募牟僮髋c對(duì)鍵盤(pán)、顯示器的操作比較:,在涉及文本文件的操作時(shí),將輸入文件看成鍵盤(pán),將輸出文件看成顯示器,格式不變。只需在程序中增加打開(kāi)與關(guān)閉文件的語(yǔ)句。

3、,8,文件的操作,文件,文本文件:,以ASCII表示的文件:記事本,*.cpp等,二進(jìn)制文件:,用二進(jìn)制形式表示的文件:可執(zhí)行程序*.EXE等,56:ASCII表示為 00110101 00110110,占兩字節(jié),56:二進(jìn)制表示為 111000,占六個(gè)二進(jìn)制位,不同的文件操作的函數(shù)、格式不同,9,文本文件的打開(kāi)與關(guān)閉 在文件操作前,需要將程序與被操作的文件聯(lián)系起來(lái),使程序可以“引用”文件。,在程序內(nèi)定義一個(gè)文件類(lèi)的對(duì)象,由該對(duì)象與文件發(fā)生聯(lián)系,程序內(nèi)所有的與文件的操作都是對(duì)該對(duì)象的操作。,fstream infile , outfile; ifstream infile; ofstream

4、outfile;,兩個(gè)對(duì)象,可以聯(lián)系兩個(gè)輸入輸出文件,對(duì)象只能聯(lián)系輸入文件,對(duì)象只能聯(lián)系輸出文件,10,定義用于輸入的文件對(duì)象,定義用于輸出的文件對(duì)象,定義用于輸入輸出的文件對(duì)象,11,如何使文件類(lèi)的對(duì)象與欲操作的文件發(fā)生聯(lián)系?,用對(duì)象打開(kāi)文件:,ifstream infile; /定義輸入文件類(lèi)對(duì)象 infile.open(“myfile1.txt”);/利用函數(shù)打開(kāi)某一文件,打開(kāi)文件的作用是,使文件流對(duì)象與要使用的文件名之間建立聯(lián)系。,ofstream outfile; /定義輸出文件類(lèi)對(duì)象 outfile.open(“myfile1.txt”);/打開(kāi)某一文件供輸出,12,infile.

5、open(“myfile1.txt”);,打開(kāi)文件“myfile1.txt”用于輸入,并將這個(gè)文件與輸入文件類(lèi)對(duì)象infile建立聯(lián)系,今后,在程序中,用到這個(gè)文件“myfile1.txt”的地方就用infile來(lái)代替。,outfile.open(“myfile2.txt”);,打開(kāi)文件“myfile2.txt”用于輸出,并將這個(gè)文件與輸出文件類(lèi)對(duì)象outfile建立聯(lián)系,今后,在程序中,用到這個(gè)文件“myfile2.txt”的地方就用outfile來(lái)代替。,13,如何從文件中輸入輸出數(shù)據(jù)?,將文件類(lèi)對(duì)象看成鍵盤(pán)和顯示器即可。,ifstream infile; /定義輸入文件類(lèi)對(duì)象 infil

6、e.open(“myfile1.txt”);/利用函數(shù)打開(kāi)某一文件 float x , y; infilexy;,myfile1.txt,3 4,內(nèi)存,infile,x,y,3,4,用infile代替myfile1.txt進(jìn)行操作。,14,ifstream outfile; /定義輸出文件類(lèi)對(duì)象 infile.open(“myfile2.txt”);/利用函數(shù)打開(kāi)某一文件 float x3 , y4; outfilextyendl;,myfile2.txt,內(nèi)存,outfile,x,y,3,4,用outfile代替myfile2.txt進(jìn)行操作。,3,4,15,4)用完文件后,使用成員函數(shù)關(guān)閉

7、文件.如:,myfile1.txt,3 4,內(nèi)存,infile,x,y,3,4,myfile2.txt,outfile,3,4,ifstream infile; ofstream outfile infile.open(“myfile1.txt”); outfile.open(“myfile2.txt”); float x,y; infilexy; outfilextyendl; infile.close(); outfile.close();,infile.close(); outfile.close();,16,void main(void) int a10; ifstream infil

8、e;/定義輸入文件類(lèi) ofstream outfile;/定義輸出文件類(lèi) infile.open(“file1.txt”);/打開(kāi)一個(gè)輸入文件“file1.txt” outfile.open(“file2.txt”);/打開(kāi)一個(gè)輸出文件“file2.out” for(int i=0;iai;/將“file1.txt”中的十個(gè)整型數(shù)輸入到ai中 for(i=0;i10;i+) outfileait;/將ai中的十個(gè)數(shù)輸出到文件“file2.txt”中 outfileendl; infile.close();/關(guān)閉輸入文件 outfile.close();/關(guān)閉輸出文件 ,輸入文件“file1.t

9、xt”必須存在,且在其中有十個(gè)整數(shù),17,當(dāng)用類(lèi)fstream定義文件對(duì)象時(shí),該對(duì)象即能定義輸入文件對(duì)象,又能定義輸出文件對(duì)象,所以打開(kāi)文件時(shí),必須在成員函數(shù)open()中的參數(shù)中給出打開(kāi)方式(讀或?qū)懀?fstream pfile1,pfile2;/定義了兩個(gè)文件類(lèi)的對(duì)象 pfile1.open(“file1.txt”, ios:in);/pfile1聯(lián)系到“file1.txt”,用于輸入 pfile2.open(“file2.txt”, ios:out);/pfile2聯(lián)系到“file2.txt”,用于輸出 char ch; pfile1ch;/輸入 pfile2ch;/輸出 pfile1

10、.close(); pfile2.close();,18,在打開(kāi)文件后,都要判斷打開(kāi)是否成功。若打開(kāi)成功,則文件流對(duì)象值為非零值;若打開(kāi)不成功,則其值為0。,ifstream pfile1,pfile2;/定義了兩個(gè)文件類(lèi)的對(duì)象 pfile1.open(“file1.txt”, ios:in); pfile2.open(“file2.txt”, ios:out); if (!pfile1) cout ”不能打開(kāi)輸入文件:file1.txt”n; exit(1); if (!pfile2) cout ”不能打開(kāi)輸出文件:file2.txt”n; exit(1);,若為0,打開(kāi)文件操作失敗,19,

11、打開(kāi)輸入文件時(shí),文件必須存在。 打開(kāi)輸出文件時(shí),若文件不存在,則建立文件;若文件存在,則刪除原文件的內(nèi)容,使其成為一個(gè)空文件。,20,char ch, str300; ifstream infile(“myfile1.txt”); ofstream outfile(“myfiel2.txt”);,涉及到字符串的文件讀寫(xiě),從鍵盤(pán)輸入一個(gè)字符:cin.get(ch);,從文件輸入一個(gè)字符:infile.get(ch);,向顯示器輸出一個(gè)字符:cout.put(ch);,向文件輸出一個(gè)字符:outfile.put(ch);,從鍵盤(pán)輸入一行字符:cin.getline(str,300);,從文件輸入一

12、行字符:infile.getline(ch,300);,從文件輸入一字符或一行字符,當(dāng)輸入至文件尾時(shí),函數(shù)返回值為0,可以據(jù)此來(lái)判斷循環(huán)結(jié)束。,21,14-15. 實(shí)現(xiàn)兩文件的拷貝的程序,void main(void) char filename1256,filename2256; coutfilename1; coutfilename2; ifstream infile(filename1); ofstream outfile(filename2); char ch; while(infile.get(ch) outfile.put(ch); infile.close(); outfile.

13、close(); ,輸入文件(源文件)名,輸出文件(目的文件)名,用構(gòu)造函數(shù)打開(kāi)文件,從源文件中讀取一個(gè)字符,至文件尾停止循環(huán),將該字符輸出至目的文件,關(guān)閉文件,22,void main(void) char filename1256,filename2256; char buf300; coutfilename1; coutfilename2; fstream infile,outfile; infile.open(filename1,ios:in); outfile.open(filename2,ios:out); while(infile.getline(buf,300) outfile

14、bufendl; outfile.close(); infile.close(); ,輸入文件(源文件)名,輸出文件(目的文件)名,用函數(shù)打開(kāi)文件,從源文件中讀取一行字符,至文件尾停止循環(huán),將該行字符輸出至目的文件,關(guān)閉文件,23,二進(jìn)制文件的讀寫(xiě)操作,若在文件的打開(kāi)方式中沒(méi)有特別說(shuō)明,打開(kāi)的文件均為ASCII碼文件,若要打開(kāi)二進(jìn)制文件,則要特別說(shuō)明并用特定的讀寫(xiě)函數(shù)。,fstream infile,outfile; infile.open(“inf1.dat”, ios:in| ios:binary);,outfile.open(“outf1.dat”, ios:out| ios:binar

15、y);,文件名,輸入方式打開(kāi),二進(jìn)制文件,文件名,輸出方式打開(kāi),二進(jìn)制文件,24,輸入函數(shù): infile.read( char *, int ),輸入文件對(duì)象名,數(shù)據(jù)進(jìn)入的內(nèi)存地址,一次讀入的字節(jié)數(shù),文件,內(nèi)存,int a10; infile.read(char *)a, 10*sizeof(int);/從文件中輸入十個(gè)整型數(shù)到a,int i; infile.read(char *)/從文件中輸入一個(gè)整型數(shù)到i,由于二進(jìn)制文件中的數(shù)據(jù)不是ASCII碼,故不能直接對(duì)其讀寫(xiě),必須要通過(guò)特定的函數(shù)予以轉(zhuǎn)換。,讀入,地址要強(qiáng)制轉(zhuǎn)換成字符型,25,輸出函數(shù): outfile.write( char *

16、, int ),輸出文件對(duì)象名,要輸出的數(shù)據(jù)在內(nèi)存中的地址,一次輸出的字節(jié)數(shù),文件,內(nèi)存,int a10=0,1,2,3,4,5,6,7,8,9; outfile.write(char *)a, 10*sizeof(int);/向文件輸出一個(gè)整型數(shù)組a,int i=4; outfile.write(char *)/向文件輸出一個(gè)整型數(shù)i,寫(xiě)出,地址要強(qiáng)制轉(zhuǎn)換成字符型,26,判斷二進(jìn)制文件是否讀到文件尾?,infile.eof( ) 當(dāng)?shù)竭_(dá)文件結(jié)束位置時(shí),該函數(shù)返回一個(gè)非零值;否則返回零。,fstream infile; infile.open(“data1.dat”,ios:in|ios:bi

17、nary); if(!infile) cout“Open Error!n”; exit(1); char str300; while(!infile.eof() infile.read(str, 300);,判斷打開(kāi)是否出錯(cuò),判斷是否讀到文件尾,27,void main(void ) char filename1256,filename2256; char buff4096; cout filename1; cout filename2; fstream infile,outfile; infile.open(filename1,ios:in | ios:binary); outfile.op

18、en(filename2,ios:out | ios:binary); int n; while (!infile.eof()/文件不結(jié)束,繼續(xù)循環(huán) infile.read(buff,4096);/一次讀4096個(gè)字節(jié) n=infile.gcount();/取實(shí)際讀的字節(jié)數(shù) outfile.write(buff,n);/按實(shí)際讀的字節(jié)數(shù)寫(xiě)入文件 infile.close(); outfile.close(); ,28,文件指針,文件內(nèi)容,文件指針,當(dāng)一打開(kāi)文件,文件指針位于文件頭,并隨著讀寫(xiě)字節(jié)數(shù)的多少順序移動(dòng)。,可以利用成員函數(shù)隨機(jī)移動(dòng)文件指針。,29,隨機(jī)讀取二進(jìn)制文件,infile.seekg(int);/將文件指針移動(dòng)到由參數(shù)指定的字節(jié)處,infile.seekg(100);/將文件指針移動(dòng)到距離文件頭100個(gè)字節(jié)處,infile.seekg(int, ios:_dir);,移動(dòng)的字節(jié)數(shù),相對(duì)位置,infile.seekg(100, ios:beg);/移動(dòng)到距文件頭100個(gè)字節(jié),

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論