版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第12章文件基本概念文件的打開(kāi)與關(guān)閉文件的讀寫(xiě)操作文件的隨機(jī)讀寫(xiě)及出錯(cuò)檢測(cè)應(yīng)用舉例2
程序中使用的數(shù)據(jù):①常量②從鍵盤(pán)輸入(scanf()、getchar()、gets())解決的方法:
創(chuàng)建數(shù)據(jù)文件特點(diǎn):數(shù)據(jù)與程序沒(méi)有分離,數(shù)據(jù)不能共享。③從數(shù)據(jù)文件中讀入
12.0
文件導(dǎo)入為什么要使用文件?文件的操作順序:
打開(kāi)文件
-->讀寫(xiě)文件
-->關(guān)閉文件對(duì)文件的操作使用庫(kù)函數(shù)實(shí)現(xiàn),包含在stdio.h3一.數(shù)據(jù)文件
存放在磁盤(pán)上的一組相關(guān)數(shù)據(jù)的有序集合。
文本文件:ASCII文件,每個(gè)字節(jié)存放一個(gè)字符的ASCII碼
二進(jìn)制文件:數(shù)據(jù)按其在內(nèi)存中的存儲(chǔ)形式原樣存放例如:shortx=12345;0011000000111001內(nèi)存存儲(chǔ)形式0011000000111001二進(jìn)制形式0011000100110010001100110011010000110101ASCII形式文本文件特點(diǎn):存儲(chǔ)量大、便于閱讀二進(jìn)制文件特點(diǎn):存儲(chǔ)量小、不便于閱讀12.1
基本概念4二.文件的讀寫(xiě)操作1.讀操作:從文件中輸入數(shù)據(jù)給程序里的變量或數(shù)組的操作。2.寫(xiě)操作:把程序中變量的值或數(shù)組元素的值輸出到文件里的操作。
三.輸入輸出緩沖區(qū)1.輸入緩沖區(qū):讀操作2.輸出緩沖區(qū):寫(xiě)操作文件輸入緩沖區(qū)輸出緩沖區(qū)程序數(shù)據(jù)區(qū)(變量、數(shù)組)內(nèi)存文件讀寫(xiě)操作讀操作寫(xiě)操作特點(diǎn):
減少了啟動(dòng)磁盤(pán)的次數(shù),提高了運(yùn)行程序的效率。
四.緩沖文件系統(tǒng)與非緩沖文件系統(tǒng)1.緩沖文件系統(tǒng):由系統(tǒng)自動(dòng)為每個(gè)正在使用的文件開(kāi)辟緩沖區(qū)。2.非緩沖文件系統(tǒng):由程序員為每個(gè)文件設(shè)定緩沖區(qū)12.1
基本概念5緩沖文件系統(tǒng)為每個(gè)正在使用的文件在內(nèi)存開(kāi)辟文件信息區(qū)
在stdio.h中有定義:typedefstruct{…;}
FILE
;1.FILE為文件型文件輸入緩沖區(qū)輸出緩沖區(qū)程序數(shù)據(jù)區(qū)(變量、數(shù)組)內(nèi)存文件讀寫(xiě)操作讀操作寫(xiě)操作緩沖區(qū)地址緩沖區(qū)大小位置指針文件名讀寫(xiě)方式等文件信息區(qū)2.文件型指針是一個(gè)指向文件型的指針變量。
例如:FILE
*fp;五.文件型指針12.1
基本概念6返回值:正常打開(kāi),值為文件信息區(qū)的首地址;打開(kāi)失敗,值為NULL一.打開(kāi)文件---fopen()函數(shù)的使用1.函數(shù)原型:FILE*fopen(char*name,char*mode)2.調(diào)用格式:fp=fopen("文件名","讀寫(xiě)方式");要打開(kāi)的文件名讀寫(xiě)方式例:FILE*fp;fp=fopen("test.txt","w");
r+awrw+a+以只讀方式打開(kāi)一個(gè)文本文件以只寫(xiě)方式打開(kāi)一個(gè)文本文件以先讀后寫(xiě)方式打開(kāi)一個(gè)文本文件以先寫(xiě)后讀方式打開(kāi)一個(gè)文本文件以先追加后讀方式打開(kāi)一個(gè)文本文件以追加寫(xiě)方式打開(kāi)一個(gè)文本文件讀寫(xiě)方式含義12.2
文件的打開(kāi)與關(guān)閉73.打開(kāi)失敗的可能原因例文件的打開(kāi)與測(cè)試
FILE*fp;if((fp=fopen("test.txt","w"))==NULL){printf(“Fileopenerror!\n”);
exit(1);}讀文件時(shí),該文件不存在;寫(xiě)文件時(shí),磁盤(pán)不允許。一.打開(kāi)文件---fopen()函數(shù)的使用12.2
文件的打開(kāi)與關(guān)閉8fp:打開(kāi)文件時(shí)返回的文件型指針2.功能:將fp指向的文件關(guān)閉。注意:
不關(guān)閉文件可能會(huì)丟失數(shù)據(jù)。文件輸入緩沖區(qū)輸出緩沖區(qū)程序數(shù)據(jù)區(qū)(變量、數(shù)組)內(nèi)存文件讀寫(xiě)操作讀操作寫(xiě)操作緩沖區(qū)地址緩沖區(qū)大小位置指針文件名讀寫(xiě)方式等文件信息區(qū)fpfclose關(guān)閉讀方式打開(kāi)的文件:使fp與指向的文件脫離關(guān)系。
關(guān)閉寫(xiě)方式打開(kāi)的文件:先自動(dòng)保存輸出緩沖區(qū)的數(shù)據(jù),再使fp與指向的文件脫離關(guān)系。
二.關(guān)閉文件---fclose()函數(shù)的使用1.
調(diào)用格式:fclose(fp);12.2
文件的打開(kāi)與關(guān)閉9
函數(shù)庫(kù)stdio.h提供了幾組函數(shù)實(shí)現(xiàn)對(duì)文件的讀寫(xiě)操作:1.fread()和fwrite()函數(shù)2.fscanf()和fprintf()函數(shù)3.fgetc()和fputc()函數(shù)4.fgets()和fputs()函數(shù)
12.3文件的讀寫(xiě)操作10一.fwrite與
fread函數(shù)1.函數(shù)原型:typefwrite(void*buffer,typesize,typecount,FILE*fp)typefread(void*buffer,typesize,typecount,FILE*fp)3.說(shuō)明:typedefunsignedtype;buffer:指向要讀/寫(xiě)的數(shù)據(jù)塊size:每個(gè)要讀/寫(xiě)的數(shù)據(jù)塊的大?。ㄗ止?jié)數(shù))count:要讀/寫(xiě)的數(shù)據(jù)塊的個(gè)數(shù)fp:指向要讀/寫(xiě)的文件返回值:成功,返回讀/寫(xiě)的塊數(shù);出錯(cuò)或文件尾,返回0fread與
fwrite只能用于二進(jìn)制文件的輸入/輸出
for(i=0;i<2;i++)
fwrite(&f[i],4,1,fp);
fwrite(f,12,1,fp);2.功能:一次讀/寫(xiě)一個(gè)數(shù)據(jù)塊例1floatf[3]={5.6,78.9,13.4};FILE*fp;fp=fopen("aa.dat","wb");
fwrite(f,4,3,fp);12.3文件的讀寫(xiě)操作11/*ep2.c*/structstu_type{charnum[15];charname[20];intscore[4];ints;}student;例2從鍵盤(pán)輸入一組學(xué)生的信息,包括:學(xué)號(hào)、姓名、4門(mén)課的成績(jī),計(jì)算出總分并一起寫(xiě)入到二進(jìn)制文件“wangluo.dat”中。12.3文件的讀寫(xiě)操作一.fwrite與
fread函數(shù)#include<stdio.h>main(void){inti;charc;FILE*fp;
if((fp=fopen("wangluo1.dat","ab"))==NULL){printf("cannotopenfile!");exit(1);}
do{printf("enternum:");gets(student.num);printf("entername:");gets();printf("enterscore:");student.s=0;
for(i=0;i<4;i++){scanf("%d",&student.score[i]);student.s+=student.score[i];}
getchar();/*跳過(guò)多余的回車鍵*/fwrite(&student,sizeof(student),1,fp);printf("continue?(Y/N)");c=getchar();getchar();/*跳過(guò)多余的回車鍵*/
}while(c=='y'||c=='Y');
fclose(fp);}思考:"ab"與"wb"結(jié)構(gòu)體變量與結(jié)構(gòu)體數(shù)組12/*ep3.c*/structstu_type{charnum[15];charname[20];intscore[4];ints;}student;例3將上例創(chuàng)建的數(shù)據(jù)文件“wangluo.dat”中保存的學(xué)生信息,如:學(xué)號(hào)、姓名、4門(mén)課的成績(jī)以及總分送顯示器輸出。#include<stdio.h>main(void){inti;FILE*fp;if((fp=fopen("wangluo1.dat","rb"))==NULL){printf("cannotopenfile!");exit(1);}
while(fread(&student,sizeof(student),1,fp)==1){printf("%-15s",student.num);printf("%-20s",);for(i=0;i<4;i++)printf("%-5d",student.score[i]);printf("%-5d\n",student.s);}fclose(fp);}體會(huì):“數(shù)據(jù)”與“程序”的分離12.3文件的讀寫(xiě)操作一.fwrite與
fread函數(shù)13/*ep4.c*/structstu_type{charnum[15];charname[20];intscore[4];ints;}student;例4將數(shù)據(jù)文件“wangluo.dat”中總分大于360的學(xué)生信息送顯示器輸出。體會(huì):“數(shù)據(jù)”與“程序”的分離“數(shù)據(jù)”的共享12.3文件的讀寫(xiě)操作一.fwrite與
fread函數(shù)#include<stdio.h>main(void){inti;FILE*fp;if((fp=fopen("wangluo1.dat","rb"))==NULL){printf("cannotopenfile!");exit(1);}
while(fread(&student,sizeof(student),1,fp)==1)
if(student.s>330)
{printf("%-15s",student.num);printf("%-20s",);for(i=0;i<4;i++)printf("%-5d",student.score[i]);printf("%-5d\n",student.s);}
fclose(fp);}14如何判斷數(shù)據(jù)文件是否結(jié)束?方法一:根據(jù)讀函數(shù)的返回值/*ep3.c*/structstu_type{charnum[15];charname[20];intscore[4];ints;}student;12.3文件的讀寫(xiě)操作一.fwrite與
fread函數(shù)#include<stdio.h>main(void){inti;FILE*fp;if((fp=fopen("wangluo1.dat","rb"))==NULL){printf("cannotopenfile!");exit(1);}
while(fread(&student,sizeof(student),1,fp)==1){printf("%-15s",student.num);printf("%-20s",);for(i=0;i<4;i++)printf("%-5d",student.score[i]);printf("%-5d\n",student.s);}
fclose(fp);}15feof函數(shù)的使用函數(shù)原型:intfeof(FILE*fp)功能:判斷fp指向的文件(文本文件或者二進(jìn)制文件)是否結(jié)束返回值:若文件結(jié)束,返回非0;若文件未結(jié)束,返回0/*ep3.c*/structstu_type{charnum[15];charname[20];intscore[4];ints;}student;如何判斷數(shù)據(jù)文件是否結(jié)束?方法二:根據(jù)feof()函數(shù)12.3文件的讀寫(xiě)操作一.fwrite與
fread函數(shù)#include<stdio.h>main(void){inti;FILE*fp;if((fp=fopen("wangluo1.dat","rb"))==NULL){printf("cannotopenfile!");exit(1);}
while(fread(&student,sizeof(student),1,fp))
if(!feof(fp))
{printf("%-15s",student.num);printf("%-20s",);for(i=0;i<4;i++)printf("%-5d",student.score[i]);printf("%-5d\n",student.s);}
elsebreak;
fclose(fp);}16/*ep2.c*/structstu_type{charnum[15];charname[20];intscore[4];ints;}student;調(diào)用格式:fprintf(文件指針,"格式字符串",輸出項(xiàng)表列);
fscanf(文件指針,"格式字符串",地址表列);12.3文件的讀寫(xiě)操作二.fprintf與
fscanf函數(shù)#include<stdio.h>main(void){inti;charc;FILE*fp;if((fp=fopen("wangluo2.dat","a"))==NULL){printf("cannotopenfile!");exit(1);}do{printf("enternum:");gets(student.num);printf("entername:");gets();printf("enterscore:");student.s=0;for(i=0;i<4;i++){scanf("%d",&student.score[i]);student.s+=student.score[i];}getchar();/*跳過(guò)多余的回車鍵*/fwrite(&student,sizeof(student),1,fp);printf("continue?(Y/N)");c=getchar();getchar();/*跳過(guò)多余的回車鍵*/
}while(c=='y'||c=='Y');
fclose(fp);}fprintf(fp,"%-15s%-20s",student.num,);for(i=0;i<4;i++)fprintf(fp,"%d",student.score[i]);fprintf(fp,"%d\n",student.s);17
設(shè)備文件:鍵盤(pán)、顯示器指向顯示器文件的指針:stdout指向鍵盤(pán)文件的指針:stdinfprintf(stdout,"格式字符串",輸出項(xiàng)表列);等價(jià)于printf("格式字符串",輸出項(xiàng)表列);fscanf(stdin,"格式字符串",地址表列);等價(jià)于scanf("格式字符串",地址表列);調(diào)用格式:fprintf(文件指針,"格式字符串",輸出項(xiàng)表列);
fscanf(文件指針,"格式字符串",地址表列);12.3文件的讀寫(xiě)操作二.fprintf與
fscanf函數(shù)1812.4文件的隨機(jī)讀寫(xiě)及出錯(cuò)檢測(cè)隨機(jī)讀寫(xiě):1.順序存取和隨機(jī)存取2.使位置指針指向文件開(kāi)頭——rewind函數(shù)3.使位置指針指向文件的某個(gè)位置——fseek函數(shù)4.得到文件的當(dāng)前位置——ftell函數(shù)出錯(cuò)檢測(cè)函數(shù):
1.文件讀寫(xiě)是否出錯(cuò)——ferror函數(shù)2.將文件錯(cuò)誤標(biāo)志和文件結(jié)束標(biāo)志置為0——clearerr函數(shù)1912.5應(yīng)用舉例編程實(shí)現(xiàn)人員登錄,每當(dāng)從鍵盤(pán)接受一個(gè)姓名,便在文件try.dat中進(jìn)行查找,若此姓名已在該文件中,則顯示姓名已存在,否則,將其存入文件。當(dāng)按【Enter】鍵時(shí)結(jié)束。#include<std
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)紡織空調(diào)軸流風(fēng)機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)打印機(jī)油墨數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)六角金蔥片數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)Puma羅茨真空泵數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)晶體管恒電位儀市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)大型超市冷庫(kù)市場(chǎng)調(diào)查研究報(bào)告
- 外源褪黑素對(duì)番茄根系形態(tài)建成調(diào)控作用的研究
- 2025年度摩托車零部件回收利用合同范本4篇
- 二零二五年度養(yǎng)老服務(wù)機(jī)構(gòu)用品采購(gòu)合同4篇
- 二零二五年度有機(jī)棉花生產(chǎn)與銷售合同4篇
- 2025水利云播五大員考試題庫(kù)(含答案)
- 老年髖部骨折患者圍術(shù)期下肢深靜脈血栓基礎(chǔ)預(yù)防專家共識(shí)(2024版)解讀
- 中藥飲片驗(yàn)收培訓(xùn)
- 手術(shù)室??谱o(hù)士工作總結(jié)匯報(bào)
- DB34T 1831-2013 油菜收獲與秸稈粉碎機(jī)械化聯(lián)合作業(yè)技術(shù)規(guī)范
- 蘇州市2025屆高三期初陽(yáng)光調(diào)研(零模)政治試卷(含答案)
- 創(chuàng)傷處理理論知識(shí)考核試題及答案
- (正式版)HG∕T 21633-2024 玻璃鋼管和管件選用規(guī)定
- 《義務(wù)教育數(shù)學(xué)課程標(biāo)準(zhǔn)(2022年版)》測(cè)試題+答案
- 殘疾軍人新退休政策
- 白酒代理合同范本
評(píng)論
0/150
提交評(píng)論