![C語(yǔ)言程序設(shè)計(jì)文件_第1頁(yè)](http://file4.renrendoc.com/view/e1fe89eb2e2729df91d6e0131bdad6c5/e1fe89eb2e2729df91d6e0131bdad6c51.gif)
![C語(yǔ)言程序設(shè)計(jì)文件_第2頁(yè)](http://file4.renrendoc.com/view/e1fe89eb2e2729df91d6e0131bdad6c5/e1fe89eb2e2729df91d6e0131bdad6c52.gif)
![C語(yǔ)言程序設(shè)計(jì)文件_第3頁(yè)](http://file4.renrendoc.com/view/e1fe89eb2e2729df91d6e0131bdad6c5/e1fe89eb2e2729df91d6e0131bdad6c53.gif)
![C語(yǔ)言程序設(shè)計(jì)文件_第4頁(yè)](http://file4.renrendoc.com/view/e1fe89eb2e2729df91d6e0131bdad6c5/e1fe89eb2e2729df91d6e0131bdad6c54.gif)
![C語(yǔ)言程序設(shè)計(jì)文件_第5頁(yè)](http://file4.renrendoc.com/view/e1fe89eb2e2729df91d6e0131bdad6c5/e1fe89eb2e2729df91d6e0131bdad6c55.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
11.1C文件概述11.2文件類型指針11.3文件的打開與關(guān)閉11.4文件的讀寫11.5文件的定位第11章文件2/4/20231《C語(yǔ)言程序設(shè)計(jì)》-第十一章11.1C文件概述文件:存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合,是操作系統(tǒng)數(shù)據(jù)管理的單位。文件分類:按存儲(chǔ)介質(zhì):普通文件:存儲(chǔ)介質(zhì)文件(磁盤、磁帶等)。設(shè)備文件:非存儲(chǔ)介質(zhì)(鍵盤、顯示器、打印機(jī)等)。按數(shù)據(jù)的組織形式:ASCII文件(文本文件):每個(gè)字節(jié)存放ASCII碼,表示一個(gè)字符。二進(jìn)制文件:數(shù)據(jù)按其在內(nèi)存中的存儲(chǔ)形式原樣存放。2/4/20232《C語(yǔ)言程序設(shè)計(jì)》-第十一章例:整數(shù)100000010011100010000內(nèi)存存儲(chǔ)形式0010011100010000二進(jìn)制形式0011000100110000001100000011000000110000ASCII形式文本文件特點(diǎn):存儲(chǔ)量大,轉(zhuǎn)換為二進(jìn)制速度慢,直觀易記。二進(jìn)制文件特點(diǎn):存儲(chǔ)量小,無(wú)需轉(zhuǎn)換。但因一個(gè)字節(jié)不對(duì)應(yīng)一個(gè)字符,故不能直接輸出其字符形式。2/4/20233《C語(yǔ)言程序設(shè)計(jì)》-第十一章
文件系統(tǒng)緩沖文件系統(tǒng)(高級(jí)文件系統(tǒng)):系統(tǒng)自動(dòng)為正在使用的文件開辟內(nèi)存緩沖區(qū)。非緩沖文件系統(tǒng)(低級(jí)文件系統(tǒng)):由用戶在程序中為每個(gè)文件設(shè)定緩沖區(qū)。磁盤文件輸出文件緩沖區(qū)輸入文件緩沖區(qū)程序數(shù)據(jù)區(qū)a緩沖文件系統(tǒng)緩沖區(qū)指令區(qū)程序用戶數(shù)據(jù)區(qū)磁盤文件非緩沖文件系統(tǒng)2/4/20234《C語(yǔ)言程序設(shè)計(jì)》-第十一章11.2文件類型指針文件類型結(jié)構(gòu)體FILE
緩沖文件系統(tǒng)為每個(gè)正使用的文件在內(nèi)存開辟文件信息區(qū)。文件信息用系統(tǒng)定義的名為FILE的結(jié)構(gòu)體描述。FILE定義在stdio.h中。typedef
struct/*TurboC文件類型聲明*/{shortlevel;/*緩沖區(qū)滿/空程度*/unsignedflags;/*文件狀態(tài)標(biāo)志*/charfd;/*文件描述符*/unsignedcharhold;/*若無(wú)緩沖區(qū)不讀取字符*/shortbsize;/*緩沖區(qū)大小*/unsignedchar*buffer;/*數(shù)據(jù)傳送緩沖區(qū)位置*/unsignedchar*curp;/*當(dāng)前讀寫位置*/unsignedistemp;/*臨時(shí)文件指示*/shorttoken;/*用作無(wú)效檢測(cè)*/}FILE;/*結(jié)構(gòu)體類型名FILE*/2/4/20235《C語(yǔ)言程序設(shè)計(jì)》-第十一章文件指針定義形式FILE*文件結(jié)構(gòu)指針名;用法:文件打開時(shí),系統(tǒng)自動(dòng)建立文件結(jié)構(gòu)體,并把指向它的指針返回來(lái),程序通過這個(gè)指針獲得文件信息,訪問文件。文件關(guān)閉后,它的文件結(jié)構(gòu)體被釋放。文件名文件使用方式文件類型指針C程序操作系統(tǒng)磁盤FILE*fp;2/4/20236《C語(yǔ)言程序設(shè)計(jì)》-第十一章打開文件fopen函數(shù)首部:
FILE*fopen(char*filename,char*mode)功能:按指定方式打開文件。返值:正常打開,為指向文件結(jié)構(gòu)體的指針;打開失敗,為NULL。11.3文件的打開與關(guān)閉要打開的文件名使用文件方式例:文件打開與測(cè)試。
FILE*fp;if((fp=fopen(“filename”,“rb+”))==NULL){printf(“cannotopenthisfile\n”);exit(0);}例FILE*fp;
fp=fopen(“c:\test”,”rb+”);
“r+/rb+”(讀寫)“a/ab”(追加)“w/wb”(只寫)“r/rb”(只讀)“w+/wb+”(讀寫)“a+/ab+”(讀寫)為輸入打開一個(gè)文本/二進(jìn)制文件為輸出打開或建立一個(gè)文本/二進(jìn)制文件為讀/寫打開一個(gè)文本/二進(jìn)制文件為讀/寫建立一個(gè)文本/二進(jìn)制文件為讀/寫打開或建立一個(gè)文本/二進(jìn)制文件向文本/二進(jìn)制文件尾追加數(shù)據(jù)文件使用方式含義系統(tǒng)自動(dòng)打開和關(guān)閉的五個(gè)標(biāo)準(zhǔn)設(shè)備文件:文件號(hào)文件指針標(biāo)準(zhǔn)文件0stdin標(biāo)準(zhǔn)輸入(鍵盤)1stdout標(biāo)準(zhǔn)輸出(顯示器)2stderr標(biāo)準(zhǔn)錯(cuò)誤(顯示器)3stdaux標(biāo)準(zhǔn)輔助(輔助設(shè)備端口)4stdprn標(biāo)準(zhǔn)打?。ù蛴C(jī))2/4/20237《C語(yǔ)言程序設(shè)計(jì)》-第十一章文件關(guān)閉fclose函數(shù)首部:int
fclose(FILE*fp)功能:關(guān)閉fp指向的文件,釋放文件結(jié)構(gòu)體和文件指針。返值:正常為0;出錯(cuò)為非0。文件打開時(shí)返回的文件類型指針磁盤文件輸出文件緩沖區(qū)輸入文件緩沖區(qū)程序數(shù)據(jù)區(qū)a緩沖文件系統(tǒng):fclose不關(guān)閉文件可能會(huì)丟失數(shù)據(jù)2/4/20238《C語(yǔ)言程序設(shè)計(jì)》-第十一章11.4文件的讀寫字符輸出fputc函數(shù)原型:int
fputc(int
ch,FILE*fp)功能:把一字符ch寫入fp指向的文件中。返值:正常,返回ch;出錯(cuò),為EOF。字符輸入fgetc函數(shù)原型:int
fgetc(FILE*fp)功能:從fp指向的文件中讀取一個(gè)字符。返值:正常,返回讀取的字符;讀到文件尾或出錯(cuò)時(shí),為EOF。
文件I/O與終端I/O#defineputc(ch,fp)fputc(ch,fp)#definegetc(fp)fgetc(fp)#defineputchar(ch)fputc(ch,stdout)#definegetchar()fgetc(stdin)2/4/20239《C語(yǔ)言程序設(shè)計(jì)》-第十一章[例]從鍵盤輸入一些字符,逐個(gè)把它們存到磁盤文件中,直到輸入‘#“結(jié)束。#include"stdio.h"main(){charch,filename[20];FILE*fp;
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL){printf("cannotopenthisfile\n");exit(0);}
while((ch=getchar())!='#')
{
fputc(ch,fp);
putchar(ch);}
fclose(fp);}file1.txtComputerandC#computerandCC:>typefile1.txtComputerandc2/4/202310《C語(yǔ)言程序設(shè)計(jì)》-第十一章文件結(jié)束feof函數(shù)原型:int
feof(FILE*fp)功能:判斷文件是否結(jié)束。返值:文件結(jié)束,返回真(非0);文件未結(jié)束,返回0。2/4/202311《C語(yǔ)言程序設(shè)計(jì)》-第十一章字符串輸入
fgets函數(shù)首部:
char*fgets(char*str,intlength,FILE*fp);功能:從fp所指向的文件中,至多讀length-1個(gè)字符,送入字符數(shù)組str中,如果在讀入length-1個(gè)字符結(jié)束前遇換行符或EOF,讀入即結(jié)束,字符串讀入后在最后加一個(gè)‘\0’字符。返值:正常,返str指針;出錯(cuò),返空指針NULL。字符串輸出fputs函數(shù)首部:int
fputs(char*str,FILE*fp);功能:把str指向的字符串寫入fp指向的文件。返值:正常,返0;出錯(cuò)返EOF。2/4/202312《C語(yǔ)言程序設(shè)計(jì)》-第十一章#include"stdio.h"#defineSIZE256main(){charch[SIZE];
intc,line;FILE*fp;
if((fp=fopen(“test.txt"
,"r"))==NULL){
printf(“Thefilecannotopen\n");exit(0);}line=1;
while(fgets(ch,SIZE,fp)!=NULL)printf("%4d\t%s\n",line++,ch);
fclose(fp);}[例]讀取文本文件的內(nèi)容,并加上行號(hào)顯示。2/4/202313《C語(yǔ)言程序設(shè)計(jì)》-第十一章字段輸入fread/輸出fwrite函數(shù)首部:int
fread(void*buffer,intnum_bytes,intcount,FILE*fp);int
fwrite(void*buffer,intnum_bytes,intcount,FILE*fp);功能:讀/寫數(shù)據(jù)塊。返值:成功,返回讀/寫的字段數(shù);出錯(cuò)或文件結(jié)束,返回0。說(shuō)明:buffer:指向要輸入/輸出數(shù)據(jù)存儲(chǔ)區(qū)的首地址的指針num_bytes:每個(gè)要讀/寫的字段的字節(jié)數(shù)count:要讀/寫的字段的個(gè)數(shù)fp:要讀/寫的文件指針fread與fwrite
一般用于二進(jìn)制文件的輸入/輸出。2/4/202314《C語(yǔ)言程序設(shè)計(jì)》-第十一章例floatf[2];FILE*fp;
fp=fopen(“aa.dat”,“rb”);
fread(f,4,2,fp);for(i=0;i<2;i++)
fread(&f[i],4,1,fp);例structstudent{intnum;charname[20];charsex;
intage;floatscore[3];}stud[10];for(i=0;i<10;i++)
fread(&stud[i],sizeof(structstudent),1,fp);2/4/202315《C語(yǔ)言程序設(shè)計(jì)》-第十一章格式化輸入fscanf/輸出fprintf函數(shù)首部:
int
fscanf(FILE*fp,char*format,arg_list);
int
fprintf(FILE*fp,constchar*format,arg_list);功能:按format格式對(duì)fp指向的文件進(jìn)行I/O操作。返值:成功,返回I/O的個(gè)數(shù);出錯(cuò)或文件尾,返回EOF。例fscanf(fp,“%d%f”,&i,&f);
//若文件中有3,4.5,則將3送入i,4.5送入f
fprintf(fp,“%d,%f”,i,f);
///將i和t按%d,%f格式輸出到fp文件例:從鍵盤按格式輸入數(shù)據(jù)存到磁盤文件中去,并回顯到屏幕上。#include<stdio.h>main(){chars[80],c[80];
inta,b;FILE*fp;
if((fp=fopen("test","w"))==NULL){puts("can'topenfile");exit();}
fscanf(stdin,“%s%d”,s,&a);/*鍵盤輸入*/
fprintf(fp,“%s%d”,s,a);/*寫入文件*/
fclose(fp);
if((fp=fopen("test","r"))==NULL){puts("can'topenfile");exit();}
fscanf(fp,“%s%d”,c,&b);/*從文件讀出*/
fprintf(stdout,“%s%d”,c,b);/*屏幕顯示*/
fclose(fp);}2/4/202316《C語(yǔ)言程序設(shè)計(jì)》-第十一章11.5文件的定位文件位置指針:指向當(dāng)前讀寫位置的指針。讀寫方式:順序讀寫:位置指針按字節(jié)位置順序移動(dòng)。隨機(jī)讀寫:位置指針按需要移動(dòng)到任意位置。
rewind函數(shù)函數(shù)首部:voidrewind(FILE*fp);功能:使fp所指文件的位置指針重置到文件開頭。返值:無(wú)例:對(duì)一個(gè)磁盤文件進(jìn)行顯示和復(fù)制兩次操作。#include<stdio.h>main(){FILE*fp1,*fp2;fp1=fopen("d:\\fengyi\\bkc\\ch12_4.c","r");fp2=fopen("d:\\fengyi\\bkc\\ch12_41.c","w");while(!feof(fp1))putchar(getc(fp1));
rewind(fp1);while(!feof(fp1))putc(getc(fp1),fp2);
fclose(fp1);fclose(fp2);}2/4/202317《C語(yǔ)言程序設(shè)計(jì)》-第十一章
fseek函數(shù)函數(shù)原型:int
fseek(FILE*fp,long
offset,intorigin);功能:改變文件位置指針的位置。返值:成功,返回0;失敗,返回非0值。文件指針位移量(以起始點(diǎn)為基點(diǎn),移動(dòng)的字節(jié)數(shù))>0
向后移動(dòng)<0
向前移動(dòng)起始點(diǎn)文件開始
SEEK_SET0文件當(dāng)前位置
SEEK_CUR1文件末尾
SEEK_END2
fseek(fp,100L,0);fseek(fp,-20L,SEEK_END);fseek(fp,50L,1);
2/4/202318《C語(yǔ)言程序設(shè)計(jì)》-第十一章#include<stdio.h>structstudent_type{intnum;charname[10];intage;charsex;}st[10];main(){inti;FILE*fp;
if((fp=fopen("studd.dat","rb"))==NULL){printf("can'topenfile\n");exit(0);}
for(i=0;i<10;i+=2){fseek(fp,i*sizeof(structstudent_type),0);
fread(&stud[i],sizeof(structstudent_type),1,fp);
printf("%s%d%d%c\n",st[i].name,st[i].num,st[i].age,st[i].sex);}
fclose(fp);}[例]磁盤文件stud.dat中存有10個(gè)學(xué)生數(shù)據(jù),要求將第2,4,6,8,10個(gè)學(xué)生數(shù)據(jù)顯示在屏幕上。2/4/202319《C語(yǔ)言程序設(shè)計(jì)》-第十一章ftell()函數(shù)函數(shù)首部:longftell(FILE*fp);功能:得到文件中的當(dāng)前位置,用相對(duì)于文件開頭的位移量來(lái)表示。返值:返回fp所指向的文件中的讀寫位置(字節(jié)數(shù));出錯(cuò),返-1L。#include"stdio.h"main(){int
i,len;
FILE*fp;
if((fp=fopen("studd.dat","a"))==NULL){printf("can'topenfile\n");exit(0);}
for(i=0;i<10;i++){ch=getchar();fputc(ch,fp1);}
len=ftell(fp1);
printf("thefilelengthis%d",len);fclose(fp1);}2/4/202320《C語(yǔ)言程序設(shè)計(jì)》-第十一章小結(jié)1.C文件的概念
(1)C語(yǔ)言中文件不是由記錄組成,而是被看做一個(gè)字符(字節(jié))的序列,稱為流式文件。(2)C文件根據(jù)數(shù)據(jù)的組織形式可分為ASCII(文本)文件和二進(jìn)制文件。(3)C語(yǔ)言對(duì)文件的處理方法為緩沖文件系統(tǒng)和非緩沖文件系統(tǒng)。ANSIC標(biāo)準(zhǔn)采用緩沖文件系統(tǒng)。(4)在緩沖文件系統(tǒng)中是靠文件指針與相應(yīng)文件建
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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年會(huì)議環(huán)境改進(jìn)性合作協(xié)議
- 2025年停車場(chǎng)權(quán)益協(xié)議
- 2025年工程項(xiàng)目施工承包墊資合同樣本
- 2025年廚房設(shè)備購(gòu)買合同示范文本
- 2025年信貸代理策劃合作協(xié)議書范本
- 2025年產(chǎn)品目錄編制合同示范
- 2025年社交酒會(huì)接待服務(wù)合同
- 2025年車輛租賃與策劃服務(wù)協(xié)議
- 2025年十四組織間的合作協(xié)議
- 2025年可再生能源工程土地征用補(bǔ)償策劃協(xié)議
- 數(shù)字孿生水利工程建設(shè)技術(shù)導(dǎo)則(試行)
- 2022年版初中物理課程標(biāo)準(zhǔn)解讀-課件
- 2024年山東化工職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案解析
- 方案偏離處理措施
- (2024年)剪映入門教程課件
- 《寵物飼養(yǎng)》課程標(biāo)準(zhǔn)
- 快餐品牌全案推廣方案
- 環(huán)境衛(wèi)生整治推進(jìn)行動(dòng)實(shí)施方案
- 口腔醫(yī)院感染預(yù)防與控制1
- 2024年同等學(xué)力英語(yǔ)真題解析
- 2023年中考英語(yǔ)二輪復(fù)習(xí):動(dòng)詞的時(shí)態(tài)(附答案解析)
評(píng)論
0/150
提交評(píng)論