![計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:文件_第1頁](http://file4.renrendoc.com/view11/M02/18/19/wKhkGWd7_rWACa0GAAFVxBDBCHA325.jpg)
![計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:文件_第2頁](http://file4.renrendoc.com/view11/M02/18/19/wKhkGWd7_rWACa0GAAFVxBDBCHA3252.jpg)
![計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:文件_第3頁](http://file4.renrendoc.com/view11/M02/18/19/wKhkGWd7_rWACa0GAAFVxBDBCHA3253.jpg)
![計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:文件_第4頁](http://file4.renrendoc.com/view11/M02/18/19/wKhkGWd7_rWACa0GAAFVxBDBCHA3254.jpg)
![計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:文件_第5頁](http://file4.renrendoc.com/view11/M02/18/19/wKhkGWd7_rWACa0GAAFVxBDBCHA3255.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
文件本章內(nèi)容第一節(jié)文件概述第二節(jié)文件打開和關(guān)閉第三節(jié)文件讀寫按照不同的標(biāo)準(zhǔn),可以將文件分為不同的類型。第一節(jié)文件概述ASCII文件和二進(jìn)制文件文件是字符(字節(jié))的序列,即由一個(gè)一個(gè)字符(字節(jié))的數(shù)據(jù)順序組成。對(duì)文件的存取是以字符(字節(jié))為單位進(jìn)行的。程序文件和數(shù)據(jù)文件一、文件指針變量第二節(jié)文件打開與關(guān)閉文件指針變量的定義格式為:
FILE*指針變量名頭文件stdio.h中定義了一個(gè)名為FILE的結(jié)構(gòu)體類型,其成員為與文件有關(guān)的信息,如文件名、文件狀態(tài)、文件當(dāng)前操作位置等。程序中使用一個(gè)文件時(shí),系統(tǒng)為該文件創(chuàng)建一個(gè)FILE類型的結(jié)構(gòu)體變量,對(duì)文件的操作是通過指向這個(gè)結(jié)構(gòu)體變量的指針變量來實(shí)現(xiàn)的,這個(gè)指針變量也稱為文件指針變量。二、文件的打開filename為文件名,mode為打開文件的方式。fopen函數(shù)的返回值為FILE類型結(jié)構(gòu)體變量的起始地址。如果文件打開失敗,則返回nullptr可以使用fopen函數(shù)打開文件。fopen函數(shù)的原型為:
FILE*fopen(constchar*filename,constchar*mode);打開文件就是將文件的有關(guān)信息保存到一個(gè)FILE類型的結(jié)構(gòu)體變量中,并使文件指針變量指向該結(jié)構(gòu)體變量,從而對(duì)文件進(jìn)行后續(xù)操作。函數(shù)說明:(1)filename文件名中可以包含文件的路徑,路徑中的分隔符應(yīng)寫成“\\”,因?yàn)椤癨\”是轉(zhuǎn)義字符,表示字符“\”。例如文件名d:\\vs\\stu_data.txt表示文件d:\vs\stu_data.txt。(2)mode打開文件的方式表明文件打開后可以進(jìn)行的操作。如果要打開二進(jìn)制文件,需要在表中的打開方式后面加字符“b”,如“rb”、“ab+”。文件打開方式說明"r"只讀方式打開文件。只允許讀取,不允許寫入。如果文件不存在,則打開失敗。"w"寫入方式打開文件。如果文件不存在,則創(chuàng)建新文件。如果文件存在,則清空文件原來的內(nèi)容。"a"追加方式打開文件。如果文件不存在,則創(chuàng)建新文件。如果文件存在,則保留文件原來的內(nèi)容,將寫入的數(shù)據(jù)追加到文件末尾。"r+"讀寫方式打開文件。既可以讀取也可以寫入。文件必須存在,否則打開失敗。"w+"讀寫方式打開文件。既可以讀取也可以寫入。如果文件不存在,則創(chuàng)建新文件。如果文件存在,則清空文件原來的內(nèi)容。"a+"讀寫方式打開文件,既可以讀取也可以寫入。如果文件不存在,則創(chuàng)建新文件。如果文件存在,則保留文件原來的內(nèi)容,將寫入的數(shù)據(jù)追加到文件末尾。函數(shù)說明:(3)調(diào)用fopen函數(shù)的方式一般為:
文件指針變量=fopen(filename,mode);(4)使用fopen函數(shù)打開文件時(shí),可能會(huì)出現(xiàn)文件不存在等原因?qū)е碌拇蜷_失敗情況。如果打開文件失敗,后續(xù)的操作都將無法進(jìn)行,因此在調(diào)用fopen函數(shù)后,一般會(huì)判斷文件是否成功打開。例如:
FILE*fp; fp=fopen("d:\\vs\\stu_data.txt","r");以只讀方式打開文件d:\vs\stu_data.txt,并且使指針變量fp指向該文件。三、文件的關(guān)閉文件使用完畢后,應(yīng)該及時(shí)關(guān)閉文件,避免數(shù)據(jù)丟失。關(guān)閉文件可以使用fclose函數(shù)。stream為指向FILE結(jié)構(gòu)體變量的指針變量。如果成功關(guān)閉文件,則fclose函數(shù)的返回值為0,否則返回非0值。fclose函數(shù)的原型為:
intfclose(FILE*stream);第三節(jié)文件讀寫文件打開后,就可以進(jìn)行讀取和寫入的操作。在C++中,文件有多種讀寫方式,從讀寫形式分,有按字符讀寫、按字符串讀寫、按數(shù)據(jù)塊讀寫和按格式讀寫。從讀寫位置分,有從文件頭讀寫和從任意位置讀寫。一、字符讀寫1、字符讀取函數(shù)fgetc()fgetc函數(shù)用于從指定的文件讀取一個(gè)字符。fgetc的原型為:
intfgetc(FILE*stream);stream為文件指針變量。fgetc函數(shù)讀取成功時(shí),返回值為讀取字符的ASCII碼,讀取到文件末尾或讀取失敗時(shí)返回EOF。EOF為文件結(jié)束標(biāo)志,是在頭文件stdio.h中定義的一個(gè)常量,它的值一般為-1。每個(gè)文件內(nèi)部都有一個(gè)位置指針,用來指向當(dāng)前的讀寫位置。在文件打開時(shí),該指針指向文件的第一個(gè)字節(jié)。使用fgetc函數(shù)后,該指針會(huì)向后移動(dòng)一個(gè)字節(jié)。因此讀取多個(gè)字符時(shí),需要連續(xù)多次使用fgetc函數(shù)。2、字符寫入函數(shù)fputc()fputc函數(shù)用于向指定的文件寫入一個(gè)字符。fputc的原型為:
intfputc(intc,FILE*stream);被寫入的文件可以用寫入、讀寫、追加方式打開。如果被寫入的文件不存在,則創(chuàng)建該文件。如果被寫入的文件已存在,用寫入或讀寫方式打開時(shí)將清除文件原有的內(nèi)容,并將寫入的字符放在文件開頭。如果要保留文件原有內(nèi)容,將寫入的字符放在文件末尾,就必須以追加方式打開。c為要寫入的字符,stream為文件指針變量。fputc函數(shù)寫入成功時(shí),返回值為寫入的字符的ASCII碼,失敗時(shí)返回EOF。每寫入一個(gè)字符,文件內(nèi)部位置指針向后移動(dòng)一個(gè)字節(jié)。程序段13-1#define_CRT_SECURE_NO_WARNINGS#include<iostream>usingnamespacestd;intmain(){
FILE*fp; charc; fp=fopen("d:\\vs\\data.txt","w");//以寫入方式打開文件
if(fp==nullptr) { cout<<"文件打開錯(cuò)誤"<<endl; exit(0); } cout<<"輸入一行字符,以#結(jié)束:"<<endl; cin>>c; while(c!='#')//每次寫入一個(gè)字符到文件中,直到#結(jié)束
{
fputc(c,fp); cin.get(c); }
fclose(fp);//關(guān)閉文件程序段13-1
fp=fopen("d:\\vs\\data.txt","r");//以只讀方式打開文件
if(fp==nullptr) { cout<<"文件打開錯(cuò)誤"<<endl; exit(0); } c=fgetc(fp); while(c!=EOF)//每次從文件讀取一個(gè)字符,直到文件結(jié)束標(biāo)志
{
cout<<c; c=fgetc(fp); } fclose(fp);//關(guān)閉文件return0;}二、字符串讀寫1、字符串讀取函數(shù)fgets()fgets函數(shù)用于從指定的文件讀取一個(gè)字符串。fgets的原型為:
char*fgets(char*str,intnumChars,FILE*stream);str可以是字符數(shù)組名,也可以是指向字符數(shù)組的字符指針變量名。str為字符串的存放地址,numChars為讀取的字符數(shù),stream為文件指針變量。fgets函數(shù)讀取成功時(shí),返回值為讀取的字符串在內(nèi)存中的首地址,也就是str,讀取失敗或讀取到文件末尾時(shí)返回nullptr。fgets函數(shù)讀取字符串時(shí),系統(tǒng)會(huì)在字符串末尾自動(dòng)添加字符串結(jié)束標(biāo)志'\0',因此函數(shù)實(shí)際上只讀取了numChars-1個(gè)字符。如果在讀取到numChars-1個(gè)字符之前遇到換行符或者EOF,則讀取也會(huì)結(jié)束,即fgets函數(shù)最多只能讀取一行數(shù)據(jù),不能跨行。2、字符串寫入函數(shù)fputs()fputs函數(shù)用于向指定的文件寫入一個(gè)字符串。fputs的原型為:
intfputs(constchar*str,FILE*stream);fputs函數(shù)向文件寫入字符串時(shí),字符串結(jié)束標(biāo)志'\0'不寫入。str可以是字符串常量,也可以是字符數(shù)組名,或是指向字符串的指針變量。str為要寫入的字符串,stream為文件指針變量。fputs函數(shù)寫入成功時(shí),返回值為0,寫入失敗時(shí)返回EOF。程序段13-2#define_CRT_SECURE_NO_WARNINGS#include<iostream>usingnamespacestd;intmain(){charstr[150],f1[50],f2[50]; FILE*fp1,*fp2; cout<<"輸入文件名1:"<<endl; cin.getline(f1,50); cout<<"輸入文件名2:"<<endl; cin.getline(f2,50); fp1=fopen(f1,"a");//以追加方式打開文件1 if(fp1==nullptr) { cout<<"文件1打開錯(cuò)誤"<<endl; exit(0); }
程序段13-2fp2=fopen(f2,"r");//以只讀方式打開文件2 if(fp2==nullptr) { cout<<"文件2打開錯(cuò)誤"<<endl; exit(0); } while(fgets(str,100,fp2)!=nullptr)//從文件2中讀取字符串
fputs(str,fp1);//將字符串寫入文件1 cout<<"文件內(nèi)容復(fù)制完成"<<endl; fclose(fp1); fclose(fp2); return0;}三、數(shù)據(jù)塊讀寫1、數(shù)據(jù)塊讀取函數(shù)fread()fread函數(shù)用于從指定的文件讀取數(shù)據(jù)塊。fread的原型為:size_tfread(void*buffer,size_tsize,size_tcount,FILE*stream);fread函數(shù)會(huì)從stream指向的文件中讀取長(zhǎng)度為size的count個(gè)數(shù)據(jù)塊,然后存放到buffer指向的內(nèi)存空間。size_t是無符號(hào)整數(shù),常用來表示數(shù)量。fread函數(shù)讀取成功時(shí),返回值為讀取的數(shù)據(jù)塊個(gè)數(shù),也就是count。如果返回值小于count,則可能讀取到了文件末尾,也可能發(fā)生了錯(cuò)誤。buffer為數(shù)據(jù)塊的存放地址,size為每個(gè)數(shù)據(jù)塊的字節(jié)數(shù),count為要讀取數(shù)據(jù)塊的個(gè)數(shù),stream為文件指針變量。2、數(shù)據(jù)塊寫入函數(shù)fwrite()fwrite函數(shù)用于向指定的文件寫入數(shù)據(jù)塊。fwrite的原型為:size_tfwrite(constvoid*buffer,size_tsize,size_tcount,FILE*stream);fwrite函數(shù)會(huì)將以buffer為首地址的內(nèi)存中長(zhǎng)度為size的count個(gè)數(shù)據(jù)塊寫入stream指向的文件中。fwrite函數(shù)寫入成功時(shí),返回值為寫入的數(shù)據(jù)塊個(gè)數(shù)。如果返回值小于count,則發(fā)生了寫入錯(cuò)誤。buffer為數(shù)據(jù)塊的存放地址,size為每個(gè)數(shù)據(jù)塊的字節(jié)數(shù),count為要寫入數(shù)據(jù)塊的個(gè)數(shù),stream為文件指針變量。程序段13-3#define_CRT_SECURE_NO_WARNINGS#include<iostream>usingnamespacestd;intmain(){structstudent { intnum; charname[20]; floatscore; }; studentstu[3],t; FILE*fp; inti; fp=fopen("d:\\vs\\stu_data.txt","wb");//以二進(jìn)制方式打開文件
if(fp==nullptr) { cout<<"文件打開錯(cuò)誤"<<endl; exit(0); }程序段13-3for(i=0;i<3;i++) { cout<<"輸入學(xué)生的信息:"<<endl; cout<<"學(xué)號(hào):";cin>>stu[i].num; cin.get(); cout<<"姓名:";cin.get(stu[i].name,20); cout<<"成績(jī):";cin>>stu[i].score; }
fwrite(stu,sizeof(student),3,fp);//將3個(gè)學(xué)生的信息寫入文件
fclose(fp); fp=fopen("d:\\vs\\stu_data.txt","rb");//以二進(jìn)制方式打開文件
cout<<"-------------------------"<<endl; cout<<"成績(jī)大于80的學(xué)生信息:"<<endl; for(i=0;i<3;i++) {
fread(&t,sizeof(student),1,fp);//從文件讀取1個(gè)學(xué)生信息
if(t.score>80) cout<<"學(xué)號(hào)"<<t.num<<"的"<<<<",成績(jī)?yōu)?<<t.score<<endl; } fclose(fp); return0;}四、隨機(jī)讀寫如果要從文件的任意位置開始讀寫,就必須先移動(dòng)文件內(nèi)部的位置指針到指定位置,再進(jìn)行讀寫,這種讀寫方式稱為隨機(jī)讀寫。按要求移動(dòng)位置指針,稱為文件的定位。1、定位文件頭函數(shù)rewind()隨著文件的讀寫操作,文件內(nèi)部的位置指針會(huì)不斷后移,rewind函數(shù)用于將位置指針重新移動(dòng)到文件開頭,它的原型為:
voidrewind(FILE*stream);stream為文件指針變量。函數(shù)沒有返回值。2、隨機(jī)定位函數(shù)fseek()fseek函數(shù)用于將位置指針移動(dòng)到文件的任意位置,它的原型為:
intfseek(FILE*stream,longoffset,intorigin);origin起始位置有三種,分別為文件開頭、當(dāng)前位置和文件末尾,每個(gè)位置都用對(duì)應(yīng)的常量來表示。offset是長(zhǎng)整型數(shù)值,可以為正值也可以為負(fù)值,為正時(shí)表示指針向后移動(dòng),為負(fù)時(shí)表示指針向前移動(dòng)。stream為文件指針變量,offset為偏移量,即要移動(dòng)的字節(jié)數(shù),origin為起始位置。fseek函數(shù)定位成功時(shí),返回值為0,否則返回一個(gè)非0值。起始位置常量名常量值文件開頭SEEK_SET0文件當(dāng)前位置SEEK_CUR1文件末尾SEEK_END2fseek函數(shù)一般用于二進(jìn)制文件。程序段13-4#define_CRT_SECURE_NO_WARNINGS#include<iostream>#include<string.h>usingnamespacestd;intmain(){structstudent { intnum; charname[20]; floatscore; }; studentstu[4],t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙教版數(shù)學(xué)七年級(jí)下冊(cè)2.1《二元一次方程》(第2課時(shí))聽評(píng)課記錄
- 五年級(jí)分?jǐn)?shù)乘法口算練習(xí)
- 湘教版數(shù)學(xué)七年級(jí)下冊(cè)2.1.2《冪的乘方與積的乘方》聽評(píng)課記錄1
- 蘇教版小學(xué)四年級(jí)上冊(cè)數(shù)學(xué)口算題
- 人教版數(shù)學(xué)九年級(jí)下冊(cè)27.3《位似》聽評(píng)課記錄(一)
- 營(yíng)業(yè)場(chǎng)所租賃合同范本
- 核心員工高層管理人員各崗位保密協(xié)議書范本
- 辦公樓加固改造工程施工合同范本
- 合作開店合同范本
- 三人合伙合作協(xié)議書范本
- 期末 (試題) -2024-2025學(xué)年教科版(廣州)英語四年級(jí)上冊(cè)
- 解讀國(guó)有企業(yè)管理人員處分條例課件
- 湖南省長(zhǎng)沙市一中2024-2025學(xué)年高一生物上學(xué)期期末考試試題含解析
- 碳纖維增強(qiáng)復(fù)合材料在海洋工程中的應(yīng)用情況
- 小孩使用手機(jī)協(xié)議書范本
- 公司市場(chǎng)分析管理制度
- 焊接材料制造工-國(guó)家職業(yè)標(biāo)準(zhǔn)(2024版)
- 江西省2024年中考數(shù)學(xué)試卷(含答案)
- 榆神礦區(qū)郭家灘煤礦(700 萬噸-年)項(xiàng)目環(huán)評(píng)
- 2024年200MW-400MWh電化學(xué)儲(chǔ)能電站設(shè)計(jì)方案
- 余土外運(yùn)施工方案
評(píng)論
0/150
提交評(píng)論