版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第12講文件內(nèi)容提要文件概述標(biāo)準(zhǔn)文件操作文件概述文件是指存放在外存儲(chǔ)器上的信息的集合數(shù)據(jù)文件的存儲(chǔ)形式(1)文本文件(ASCII文件)按數(shù)據(jù)的ASCII形式存儲(chǔ)(2)二進(jìn)制文件按數(shù)據(jù)在內(nèi)存中的二進(jìn)制形式存儲(chǔ)標(biāo)準(zhǔn)文件與非標(biāo)準(zhǔn)文件利用緩沖區(qū)將對(duì)磁盤文件的頻繁逐次訪問(wèn)變?yōu)榕吭L問(wèn)的做法稱為標(biāo)準(zhǔn)文件操作
程序數(shù)據(jù)區(qū)輸出文件緩沖區(qū)輸入文件緩沖區(qū)磁盤輸出輸入輸出輸入文件的存取方式標(biāo)準(zhǔn)I/O提供了4種文件存取方法(1)讀寫一個(gè)字符(2)讀寫一個(gè)字符串,將多個(gè)字符組成的字符串寫入文件或從文件中讀出。(3)格式化讀寫,根據(jù)格式控制指定的數(shù)據(jù)格式對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換存取。(4)成塊讀寫,也稱做按記錄讀寫。4種存取方式和C語(yǔ)言的對(duì)應(yīng)的函數(shù)關(guān)系:標(biāo)準(zhǔn)文件FILE結(jié)構(gòu)指針FILE類型保存被使用的文件的有關(guān)信息所有的文件操作都需要FILE類型的指針FILE是庫(kù)文件中定義的結(jié)構(gòu)體的別名注意不要寫成structFILE舉例FILE*fp;FILE類型typedefstruct{shortlevel;/*緩沖區(qū)滿空程度*/unsignedflags;/*文件狀態(tài)標(biāo)志*/charfd;/*文件描述符*/unsignedcharhold;/*無(wú)緩沖則不讀取字符*/shortbsize;/*緩沖區(qū)大小*/unsignedchar*buffer;/*數(shù)據(jù)緩沖區(qū)*/unsignedchar*curp;/*當(dāng)前位置指針*/unsignedistemp;/*臨時(shí)文件指示器*/shorttoken;/*用于有效性檢查*/}FILE;文件的打開(kāi)(fopen函數(shù))函數(shù)原型FILE*fopen(char*,char*mode);參數(shù)說(shuō)明:要打開(kāi)的文件路徑mode:打開(kāi)模式返回值若成功,返回指向被打開(kāi)文件的指針若出錯(cuò),返回空指針NULL(0)文件的打開(kāi)模式文件操作方式含義″r″(只讀)為只讀打開(kāi)一個(gè)字符文件″w″(只寫)為只寫打開(kāi)一個(gè)字符文件,文件指針指向文件首部″a″(追加)打開(kāi)字符文件,指向文件尾,在已存在的文件中追加數(shù)據(jù)″rb″(只讀)為只讀打開(kāi)一個(gè)二進(jìn)制文件″wb″(只寫)為只寫打開(kāi)一個(gè)二進(jìn)制文件″ab″(追加)打開(kāi)二進(jìn)制文件,以向文件追加數(shù)據(jù)″r+″(讀寫)以讀寫方式打開(kāi)一個(gè)已存在的字符文件″w+″(讀寫)為讀寫建立一個(gè)新的字符文件″a+″(讀寫)為讀寫打開(kāi)一個(gè)字符文件,進(jìn)行追加″rb+″(讀寫)為讀寫打開(kāi)一個(gè)二進(jìn)制文件″wb+″(讀寫)為讀寫建立一個(gè)新的二進(jìn)制文件″ab+″(讀寫)為讀寫打開(kāi)一個(gè)二進(jìn)制文件進(jìn)行追加文件的打開(kāi)舉例FILE*fp1,*fp2;/*以文本只讀方式打開(kāi)file1*/if(!(fp1=fopen("file1","r"))){printf("CannotOpenThisFile!\n");exit(0);/*退出程序*/}/*以二進(jìn)制讀寫方式打開(kāi)*/fp2=fopen("C:\\HOME\\","rb+");
文件的關(guān)閉(fclose函數(shù))函數(shù)原型intfclose(FILE*fp);參數(shù)說(shuō)明fp:要關(guān)閉的文件指針?lè)祷刂等舫晒Γ祷?若出錯(cuò),返回EOF(-1)不用的文件應(yīng)關(guān)閉,防止數(shù)據(jù)破壞丟失文件的關(guān)閉舉例FILE*fp;charfile[]="D:\\USER\\STUDENTS.DAT";if(!(fp=fopen(file,"rb+"))){printf("Openerror!\n",file);exit(0);}......fclose(fp);讀寫操作(1)讀寫文件中字符的函數(shù):從磁盤文件讀取字符的函數(shù)是fgetc(),形式為:int
fgetc(FILE*stream);詳細(xì)說(shuō)明
將一個(gè)字符寫入磁盤文件的函數(shù)是fputc(),其形式為:int
fputc(int
ch,F(xiàn)ILE*stream);詳細(xì)說(shuō)明
注:getc()和fgetc()功能相同,putc()和fputc()相同應(yīng)用舉例讀寫操作(2)讀寫文件中字符串的函數(shù):從磁盤文件讀取字符串的函數(shù)是fgets(),形式為:char*fgets(char*str
,intn,F(xiàn)ILE*stream);詳細(xì)說(shuō)明
將一個(gè)字符串寫入磁盤文件的函數(shù)是fputs(),其形式為:char*fputs(char*str
,F(xiàn)ILE*stream);詳細(xì)說(shuō)明
應(yīng)用舉例讀寫操作(3)格式化讀寫函數(shù)函數(shù)原型int
fscanf(FILE*fp,char*format[,address,...]);int
fprintf(FILE*fp,char*format[,argument,...]);說(shuō)明與printf和scanf函數(shù)類似從文件輸入或輸出到文件應(yīng)用舉例標(biāo)準(zhǔn)的隨機(jī)讀寫(1)文件指針定位函數(shù)文件位置指針位置指針指向當(dāng)前讀寫的位置每次讀寫文件,位置指針都會(huì)相應(yīng)移動(dòng)可以通過(guò)相關(guān)函數(shù)強(qiáng)制修改位置指針相關(guān)函數(shù)rewind函數(shù)詳細(xì)說(shuō)明fseek函數(shù)詳細(xì)說(shuō)明ftell函數(shù)詳細(xì)說(shuō)明標(biāo)準(zhǔn)的隨機(jī)讀寫(2)文件隨機(jī)讀寫函數(shù):fwrite和freadsize_t
fwrite(void*buffer,
size_tsize,
size_tcount, FILE*fp);size_t
fread(void*buffer,
size_tsize,
size_tcount, FILE*fp);參數(shù)說(shuō)明應(yīng)用舉例fgetc/getc函數(shù)函數(shù)原型intfgetc(FILE*fp);intgetc(FILE*fp);參數(shù)fp:文件指針?lè)祷刂等舫晒?,返回輸入的字符若失敗或文件結(jié)束,返回EOFfputc/putc函數(shù)函數(shù)原型intfputc(intc,FILE*fp);intputc(intc,FILE*fp);參數(shù)c:要輸出到文件的字符fp:文件指針?lè)祷刂等舫晒?,返回輸出的字符若失敗或文件結(jié)束,返回EOF讀寫文件中字符的函數(shù)voidmain(){FILE*fp;/*定義FILE結(jié)構(gòu)指針變量*/charch;if((fp=fopen(″data1.txt″,″r″))==NULL)/*打開(kāi)并測(cè)試文件*/{ printf(″filecannotbeopened\n″); exit(1);/*若文件打開(kāi)不成功,退出*/}while((ch=fgetc(fp))!=EOF)/*讀文件并測(cè)試是否文件尾*/fputc(ch,stdout);/*輸出到標(biāo)準(zhǔn)設(shè)備文件(顯示器)顯示*/fclose(fp);/*關(guān)閉文件*/}fgets函數(shù)函數(shù)原型char*fgets(char*s,intn,FILE*fp);返回值若成功,返回s首地址;若失敗,返回NULL說(shuō)明從fp輸入字符串到s中輸入n-1個(gè)字符,或遇到換行符或EOF為止讀完后自動(dòng)在字符串末尾添加'\0'fputs函數(shù)函數(shù)原型intfputs(char*s,FILE*fp);返回值若成功,返回輸出字符個(gè)數(shù)(或最后的字符)若失敗,返回EOF說(shuō)明字符串的結(jié)束標(biāo)志'\0'不會(huì)輸出到文件也不會(huì)在字符串末尾自動(dòng)添加換行符讀寫文件中字符串的函數(shù)#include〈stdio.h〉voidmain(){FILE*fp2;charbuffer[64];if((fp2=fopen(″data2.txt″,″r″))==NULL)/*以只讀方式打開(kāi)文件,且測(cè)試*/{printf(″can′topenfile\n″);exit(1);/*打開(kāi)不成功退出*/}while(!feof(fp2))/*測(cè)試文件是否結(jié)束*/{if(fgets(buffer,64,fp2)!=NULL)/*讀一行字符并測(cè)試是否為空*/printf(″%s″,buffer);/*顯示該行字符*/}fclose(fp2);/*關(guān)閉文件*/}格式化讀寫函數(shù)/*2007-4*/#include<stdio.h>main(){FILE*fp;intk,n,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w");fprintf(fp,"%d%d%d\n",a[0],a[1],a[2]);fprintf(fp,"%d%d%d\n",a[3],a[4],a[5]);fclose(fp);fp=fopen("d2.dat","r");fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);fclose(fp);}輸出結(jié)果:123456rewind函數(shù)函數(shù)原型voidrewind(FILE*fp);參數(shù)fp:文件指針功能使文件位置指針重新返回文件開(kāi)頭fseek函數(shù)(1)函數(shù)原型intfseek(FILE*fp,longoffset,intwhence);參數(shù)fp:文件指針offset:偏移量whence:起始位置功能隨機(jī)改變文件的位置指針fseek函數(shù)(2)起始位置SEEK_SET(0):文件開(kāi)始SEEK_CUR(1):文件當(dāng)前位置SEEK_END(2):文件末尾舉例fseek(fp,100L,SEEK_SET);fseek(fp,-10L,SEEK_CUR);fseek(fp,-20L,SEEK_END);ftell函數(shù)函數(shù)原型longftell(FILE*fp);參數(shù)fp:文件指針?lè)祷刂等舫晒?,返回?dāng)前文件指針位置若出錯(cuò),返回-1Lfwrite和fread函數(shù)說(shuō)明參數(shù)buffer:要讀/寫的數(shù)據(jù)塊地址size:要讀/寫的每個(gè)數(shù)據(jù)項(xiàng)的字節(jié)數(shù)count:要讀/寫的數(shù)據(jù)項(xiàng)數(shù)量fp:文件指針?lè)祷刂等舫晒?,返回?shí)際讀/寫的數(shù)據(jù)項(xiàng)數(shù)量若失敗,一般返回0文件隨機(jī)讀寫函數(shù)/*2006-9*/#include<stdio.h>main(){FILE*fp;inti;charch[]="abcd",t;fp=fopen("abc.dat","wb+");for(i=0;i<4;i++)fwrite(&ch[i],1,1,fp);fseek(fp,-2L,SEEK_END);fread(&t,1,1,fp);fclose(fp);printf(“%c\n”,t);/*輸出c*/}2007年4月設(shè)有定義:FILE*fw;,請(qǐng)將以下打開(kāi)文件的語(yǔ)句補(bǔ)充完整,以便可以向文本文件readme.txt的最后續(xù)寫內(nèi)容。fw=fopen(“readme.txt”,___________)"a"2007年4月有以下程序#include<stdio.h>main(){FILE*fp;inti,a[6]={1,2,3,4,5,6};fp=fopen(“d3.dat”,”wb+”);fwrite(a,sizeof(int),6,fp);fseek(fp,sizeof(int)*3,SEEK_SET);/*該語(yǔ)句使讀文件的位置指針從文件頭向后移動(dòng)3個(gè)int型數(shù)據(jù)*/fread(a,sizeof(int),3,fp);fclose(fp);for(i=0;i<6;i++)printf(“%d,”,a[i]);}程序運(yùn)行后的輸出結(jié)果是()
A)4,5,6,4,5,6,B)1,2,3,4,5,6,C)4,5,6,1,2,3,D)6,5,4,3,2,1,2007年9月1、讀取二進(jìn)制文件的函數(shù)調(diào)用形式為:fread(buffer,size,count,fp);,其中buffer代表的是A)一個(gè)文件指針,指向待讀取的文件B)一個(gè)整型變量,代表待讀取的數(shù)據(jù)的字節(jié)數(shù)
C)一個(gè)內(nèi)存塊的首地址,代表讀入數(shù)據(jù)存放的地址D)一個(gè)內(nèi)存塊的字節(jié)數(shù)2007年9月2、有以下程序#include<stdio.h>main(){FILE*fp;inta[10]={1,2,3,0,0},i;fp=fopen("d2.dat,"wb");fwrite(a,sizeof(int),5,fp);fwrite(a,sizeof(int),5,fp);fclose(fp);fp=fopen("d2.dat","rb");fread(a,sizeof(int),10,fp);fclose(fp);for(i=0;i<10;i++)printf("%d",a);}程序的運(yùn)行結(jié)果是A)1,2,3,0,0,0,0,0,0,0,B)1,2,3,1,2,3,0,0,0,0,C)123,0,0,0,0,123,0,0,0,0,D)1,2,3,0,0,1,2,3,0,0,
2008年4月1、以下敘述中錯(cuò)誤的是A)gets函數(shù)用于從終端讀入字符串B)getchar函數(shù)用于從磁盤文件讀入字符C)fputs函數(shù)用于把字符串輸出到文件D)fwrite函數(shù)用于以二進(jìn)制形式輸出數(shù)據(jù)到文件2008年4月2、有以下程序#include<stdio.h>main(){FILE*fp;inta[10]={1,2,3},i,n;fp=fopen("d1.dat","w");for(i=0;i<3;i++)fprintf(fp,"%d",a[i]);fprintf(fp,"\n");fclose(fp);fp=fopen("d1.dat","r");fscanf(fp,"%d",&n);fclose(fp);printf("%d\n",n);}程序的運(yùn)行結(jié)果是A)12300B)123C)1D)321
2008年4月3、以下程序從名為的文本文件中逐個(gè)讀入字符并顯示在屏幕上。請(qǐng)?zhí)羁铡?include<stdio.h>main(){FILE*fp;charch;fp=fopen(【15】);ch=fgetc(fp);while(!feof(fp)){putchar(ch);ch=fgetc(fp);}putchar('\n');fclose(fp);}"","r"2008年9月1、有以下程序#include<stdio.h>main(){FILE*
溫馨提示
- 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年濟(jì)寧道路運(yùn)輸從業(yè)人員資格考試內(nèi)容有哪些
- 2025年綏化道路運(yùn)輸從業(yè)資格證模擬考試年新版
- 《虎年春節(jié)模板》課件
- 城市綠化養(yǎng)護(hù)服務(wù)招投標(biāo)模板
- 廣州市二手房按揭合同簽訂指南
- 教育設(shè)施租賃協(xié)議
- 智能化施工合同住宅小區(qū)改造
- 城市綠化帶建設(shè)室外施工合同
- 旅行社暖氣管道維修施工合同
- 2024春期國(guó)開(kāi)電大本科《經(jīng)濟(jì)學(xué)(本)》在線形考(形考任務(wù)1至6)試題及答案
- 中國(guó)文學(xué)經(jīng)典愛(ài)情解碼智慧樹(shù)知到期末考試答案章節(jié)答案2024年佳木斯大學(xué)
- DB32T4065-2021建筑幕墻工程技術(shù)標(biāo)準(zhǔn)
- 醫(yī)學(xué)詞匯大全
- 健康管理學(xué)智慧樹(shù)知到期末考試答案2024年
- C#程序開(kāi)發(fā)范例寶典
- 中醫(yī)與眼病知識(shí)培訓(xùn)課件
- 美容美體藝術(shù)專業(yè)人才培養(yǎng)方案(中職)
- 2024年水利云播五大員考試題庫(kù)及答案
- 超速和疲勞駕駛安全教育
- 數(shù)據(jù)員的述職報(bào)告
評(píng)論
0/150
提交評(píng)論