版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
11.1C文件概述11.2文件類型指針11.3文件的打開與關(guān)閉11.4文件的讀寫11.5文件的定位第11章文件2/4/20231《C語言程序設(shè)計(jì)》-第十一章11.1C文件概述文件:存儲在外部介質(zhì)上數(shù)據(jù)的集合,是操作系統(tǒng)數(shù)據(jù)管理的單位。文件分類:按存儲介質(zhì):普通文件:存儲介質(zhì)文件(磁盤、磁帶等)。設(shè)備文件:非存儲介質(zhì)(鍵盤、顯示器、打印機(jī)等)。按數(shù)據(jù)的組織形式:ASCII文件(文本文件):每個字節(jié)存放ASCII碼,表示一個字符。二進(jìn)制文件:數(shù)據(jù)按其在內(nèi)存中的存儲形式原樣存放。2/4/20232《C語言程序設(shè)計(jì)》-第十一章例:整數(shù)100000010011100010000內(nèi)存存儲形式0010011100010000二進(jìn)制形式0011000100110000001100000011000000110000ASCII形式文本文件特點(diǎn):存儲量大,轉(zhuǎn)換為二進(jìn)制速度慢,直觀易記。二進(jìn)制文件特點(diǎn):存儲量小,無需轉(zhuǎn)換。但因一個字節(jié)不對應(yīng)一個字符,故不能直接輸出其字符形式。2/4/20233《C語言程序設(shè)計(jì)》-第十一章
文件系統(tǒng)緩沖文件系統(tǒng)(高級文件系統(tǒng)):系統(tǒng)自動為正在使用的文件開辟內(nèi)存緩沖區(qū)。非緩沖文件系統(tǒng)(低級文件系統(tǒng)):由用戶在程序中為每個文件設(shè)定緩沖區(qū)。磁盤文件輸出文件緩沖區(qū)輸入文件緩沖區(qū)程序數(shù)據(jù)區(qū)a緩沖文件系統(tǒng)緩沖區(qū)指令區(qū)程序用戶數(shù)據(jù)區(qū)磁盤文件非緩沖文件系統(tǒng)2/4/20234《C語言程序設(shè)計(jì)》-第十一章11.2文件類型指針文件類型結(jié)構(gòu)體FILE
緩沖文件系統(tǒng)為每個正使用的文件在內(nèi)存開辟文件信息區(qū)。文件信息用系統(tǒng)定義的名為FILE的結(jié)構(gòu)體描述。FILE定義在stdio.h中。typedef
struct/*TurboC文件類型聲明*/{shortlevel;/*緩沖區(qū)滿/空程度*/unsignedflags;/*文件狀態(tài)標(biāo)志*/charfd;/*文件描述符*/unsignedcharhold;/*若無緩沖區(qū)不讀取字符*/shortbsize;/*緩沖區(qū)大小*/unsignedchar*buffer;/*數(shù)據(jù)傳送緩沖區(qū)位置*/unsignedchar*curp;/*當(dāng)前讀寫位置*/unsignedistemp;/*臨時文件指示*/shorttoken;/*用作無效檢測*/}FILE;/*結(jié)構(gòu)體類型名FILE*/2/4/20235《C語言程序設(shè)計(jì)》-第十一章文件指針定義形式FILE*文件結(jié)構(gòu)指針名;用法:文件打開時,系統(tǒng)自動建立文件結(jié)構(gòu)體,并把指向它的指針返回來,程序通過這個指針獲得文件信息,訪問文件。文件關(guān)閉后,它的文件結(jié)構(gòu)體被釋放。文件名文件使用方式文件類型指針C程序操作系統(tǒng)磁盤FILE*fp;2/4/20236《C語言程序設(shè)計(jì)》-第十一章打開文件fopen函數(shù)首部:
FILE*fopen(char*filename,char*mode)功能:按指定方式打開文件。返值:正常打開,為指向文件結(jié)構(gòu)體的指針;打開失敗,為NULL。11.3文件的打開與關(guān)閉要打開的文件名使用文件方式例:文件打開與測試。
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+”(讀寫)為輸入打開一個文本/二進(jìn)制文件為輸出打開或建立一個文本/二進(jìn)制文件為讀/寫打開一個文本/二進(jìn)制文件為讀/寫建立一個文本/二進(jìn)制文件為讀/寫打開或建立一個文本/二進(jìn)制文件向文本/二進(jìn)制文件尾追加數(shù)據(jù)文件使用方式含義系統(tǒng)自動打開和關(guān)閉的五個標(biāo)準(zhǔn)設(shè)備文件:文件號文件指針標(biāo)準(zhǔn)文件0stdin標(biāo)準(zhǔn)輸入(鍵盤)1stdout標(biāo)準(zhǔn)輸出(顯示器)2stderr標(biāo)準(zhǔn)錯誤(顯示器)3stdaux標(biāo)準(zhǔn)輔助(輔助設(shè)備端口)4stdprn標(biāo)準(zhǔn)打?。ù蛴C(jī))2/4/20237《C語言程序設(shè)計(jì)》-第十一章文件關(guān)閉fclose函數(shù)首部:int
fclose(FILE*fp)功能:關(guān)閉fp指向的文件,釋放文件結(jié)構(gòu)體和文件指針。返值:正常為0;出錯為非0。文件打開時返回的文件類型指針磁盤文件輸出文件緩沖區(qū)輸入文件緩沖區(qū)程序數(shù)據(jù)區(qū)a緩沖文件系統(tǒng):fclose不關(guān)閉文件可能會丟失數(shù)據(jù)2/4/20238《C語言程序設(shè)計(jì)》-第十一章11.4文件的讀寫字符輸出fputc函數(shù)原型:int
fputc(int
ch,FILE*fp)功能:把一字符ch寫入fp指向的文件中。返值:正常,返回ch;出錯,為EOF。字符輸入fgetc函數(shù)原型:int
fgetc(FILE*fp)功能:從fp指向的文件中讀取一個字符。返值:正常,返回讀取的字符;讀到文件尾或出錯時,為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語言程序設(shè)計(jì)》-第十一章[例]從鍵盤輸入一些字符,逐個把它們存到磁盤文件中,直到輸入‘#“結(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語言程序設(shè)計(jì)》-第十一章文件結(jié)束feof函數(shù)原型:int
feof(FILE*fp)功能:判斷文件是否結(jié)束。返值:文件結(jié)束,返回真(非0);文件未結(jié)束,返回0。2/4/202311《C語言程序設(shè)計(jì)》-第十一章字符串輸入
fgets函數(shù)首部:
char*fgets(char*str,intlength,FILE*fp);功能:從fp所指向的文件中,至多讀length-1個字符,送入字符數(shù)組str中,如果在讀入length-1個字符結(jié)束前遇換行符或EOF,讀入即結(jié)束,字符串讀入后在最后加一個‘\0’字符。返值:正常,返str指針;出錯,返空指針NULL。字符串輸出fputs函數(shù)首部:int
fputs(char*str,FILE*fp);功能:把str指向的字符串寫入fp指向的文件。返值:正常,返0;出錯返EOF。2/4/202312《C語言程序設(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)容,并加上行號顯示。2/4/202313《C語言程序設(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ù);出錯或文件結(jié)束,返回0。說明:buffer:指向要輸入/輸出數(shù)據(jù)存儲區(qū)的首地址的指針num_bytes:每個要讀/寫的字段的字節(jié)數(shù)count:要讀/寫的字段的個數(shù)fp:要讀/寫的文件指針fread與fwrite
一般用于二進(jìn)制文件的輸入/輸出。2/4/202314《C語言程序設(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語言程序設(shè)計(jì)》-第十一章格式化輸入fscanf/輸出fprintf函數(shù)首部:
int
fscanf(FILE*fp,char*format,arg_list);
int
fprintf(FILE*fp,constchar*format,arg_list);功能:按format格式對fp指向的文件進(jìn)行I/O操作。返值:成功,返回I/O的個數(shù);出錯或文件尾,返回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語言程序設(shè)計(jì)》-第十一章11.5文件的定位文件位置指針:指向當(dāng)前讀寫位置的指針。讀寫方式:順序讀寫:位置指針按字節(jié)位置順序移動。隨機(jī)讀寫:位置指針按需要移動到任意位置。
rewind函數(shù)函數(shù)首部:voidrewind(FILE*fp);功能:使fp所指文件的位置指針重置到文件開頭。返值:無例:對一個磁盤文件進(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語言程序設(shè)計(jì)》-第十一章
fseek函數(shù)函數(shù)原型:int
fseek(FILE*fp,long
offset,intorigin);功能:改變文件位置指針的位置。返值:成功,返回0;失敗,返回非0值。文件指針位移量(以起始點(diǎn)為基點(diǎn),移動的字節(jié)數(shù))>0
向后移動<0
向前移動起始點(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語言程序設(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個學(xué)生數(shù)據(jù),要求將第2,4,6,8,10個學(xué)生數(shù)據(jù)顯示在屏幕上。2/4/202319《C語言程序設(shè)計(jì)》-第十一章ftell()函數(shù)函數(shù)首部:longftell(FILE*fp);功能:得到文件中的當(dāng)前位置,用相對于文件開頭的位移量來表示。返值:返回fp所指向的文件中的讀寫位置(字節(jié)數(shù));出錯,返-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語言程序設(shè)計(jì)》-第十一章小結(jié)1.C文件的概念
(1)C語言中文件不是由記錄組成,而是被看做一個字符(字節(jié))的序列,稱為流式文件。(2)C文件根據(jù)數(shù)據(jù)的組織形式可分為ASCII(文本)文件和二進(jìn)制文件。(3)C語言對文件的處理方法為緩沖文件系統(tǒng)和非緩沖文件系統(tǒng)。ANSIC標(biāo)準(zhǔn)采用緩沖文件系統(tǒng)。(4)在緩沖文件系統(tǒng)中是靠文件指針與相應(yīng)文件建
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024石家莊公租房租賃合同編寫指南及范本3篇
- 2024版貨物訂購合同
- 2024英文企業(yè)海外市場拓展與業(yè)務(wù)洽談合同3篇
- 2025年度園林景觀沙石供應(yīng)與施工承包合同樣本4篇
- 2025年度醫(yī)藥代銷合同模板(醫(yī)藥供應(yīng)鏈)4篇
- 2025年度商業(yè)街區(qū)物業(yè)管理與服務(wù)合同3篇
- 2025年度商場家具安裝與商業(yè)空間優(yōu)化承包協(xié)議4篇
- 2024版權(quán)評估合同3篇帶眉腳
- 2025年度溫室大棚配套設(shè)施供應(yīng)與售后服務(wù)合同4篇
- 2025年度智慧城市基礎(chǔ)設(shè)施建設(shè)承包協(xié)議4篇
- 經(jīng)外周中心靜脈置管術(shù)(PICC)知情同意書
- 福建省福州市鼓樓實(shí)驗(yàn)小學(xué)教育集團(tuán)2023-2024學(xué)年五年級下學(xué)期期中英語試題
- 消防安全隱患等級
- 溫室氣體(二氧化碳和甲烷)走航監(jiān)測技術(shù)規(guī)范
- 有關(guān)傳統(tǒng)文化的謎語
- 藥品代持協(xié)議書
- 嘔血護(hù)理查房
- 2024年新青島版(六三制)三年級下冊科學(xué)全冊知識點(diǎn)
- 朝韓關(guān)系相關(guān)分析
- 校園熱水方案
- 部編版一年級語文下冊第一單元大單元教學(xué)設(shè)計(jì)
評論
0/150
提交評論