版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
11.1C文件概述11.2文件類型指針11.3文件的打開與關(guān)閉11.4文件的讀寫11.5文件的定位第11章文件2/4/20231《C語言程序設(shè)計》-第十一章11.1C文件概述文件:存儲在外部介質(zhì)上數(shù)據(jù)的集合,是操作系統(tǒng)數(shù)據(jù)管理的單位。文件分類:按存儲介質(zhì):普通文件:存儲介質(zhì)文件(磁盤、磁帶等)。設(shè)備文件:非存儲介質(zhì)(鍵盤、顯示器、打印機等)。按數(shù)據(jù)的組織形式:ASCII文件(文本文件):每個字節(jié)存放ASCII碼,表示一個字符。二進制文件:數(shù)據(jù)按其在內(nèi)存中的存儲形式原樣存放。2/4/20232《C語言程序設(shè)計》-第十一章例:整數(shù)100000010011100010000內(nèi)存存儲形式0010011100010000二進制形式0011000100110000001100000011000000110000ASCII形式文本文件特點:存儲量大,轉(zhuǎn)換為二進制速度慢,直觀易記。二進制文件特點:存儲量小,無需轉(zhuǎn)換。但因一個字節(jié)不對應(yīng)一個字符,故不能直接輸出其字符形式。2/4/20233《C語言程序設(shè)計》-第十一章
文件系統(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è)計》-第十一章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è)計》-第十一章文件指針定義形式FILE*文件結(jié)構(gòu)指針名;用法:文件打開時,系統(tǒng)自動建立文件結(jié)構(gòu)體,并把指向它的指針返回來,程序通過這個指針獲得文件信息,訪問文件。文件關(guān)閉后,它的文件結(jié)構(gòu)體被釋放。文件名文件使用方式文件類型指針C程序操作系統(tǒng)磁盤FILE*fp;2/4/20236《C語言程序設(shè)計》-第十一章打開文件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+”(讀寫)為輸入打開一個文本/二進制文件為輸出打開或建立一個文本/二進制文件為讀/寫打開一個文本/二進制文件為讀/寫建立一個文本/二進制文件為讀/寫打開或建立一個文本/二進制文件向文本/二進制文件尾追加數(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)打印(打印機)2/4/20237《C語言程序設(shè)計》-第十一章文件關(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è)計》-第十一章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è)計》-第十一章[例]從鍵盤輸入一些字符,逐個把它們存到磁盤文件中,直到輸入‘#“結(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è)計》-第十一章文件結(jié)束feof函數(shù)原型:int
feof(FILE*fp)功能:判斷文件是否結(jié)束。返值:文件結(jié)束,返回真(非0);文件未結(jié)束,返回0。2/4/202311《C語言程序設(shè)計》-第十一章字符串輸入
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è)計》-第十一章#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è)計》-第十一章字段輸入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
一般用于二進制文件的輸入/輸出。2/4/202314《C語言程序設(shè)計》-第十一章例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è)計》-第十一章格式化輸入fscanf/輸出fprintf函數(shù)首部:
int
fscanf(FILE*fp,char*format,arg_list);
int
fprintf(FILE*fp,constchar*format,arg_list);功能:按format格式對fp指向的文件進行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è)計》-第十一章11.5文件的定位文件位置指針:指向當(dāng)前讀寫位置的指針。讀寫方式:順序讀寫:位置指針按字節(jié)位置順序移動。隨機讀寫:位置指針按需要移動到任意位置。
rewind函數(shù)函數(shù)首部:voidrewind(FILE*fp);功能:使fp所指文件的位置指針重置到文件開頭。返值:無例:對一個磁盤文件進行顯示和復(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è)計》-第十一章
fseek函數(shù)函數(shù)原型:int
fseek(FILE*fp,long
offset,intorigin);功能:改變文件位置指針的位置。返值:成功,返回0;失敗,返回非0值。文件指針位移量(以起始點為基點,移動的字節(jié)數(shù))>0
向后移動<0
向前移動起始點文件開始
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è)計》-第十一章#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è)計》-第十一章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è)計》-第十一章小結(jié)1.C文件的概念
(1)C語言中文件不是由記錄組成,而是被看做一個字符(字節(jié))的序列,稱為流式文件。(2)C文件根據(jù)數(shù)據(jù)的組織形式可分為ASCII(文本)文件和二進制文件。(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 律師執(zhí)業(yè)年度工作總結(jié)
- 供電工程施工方案(技術(shù)標(biāo))
- 湖南省株洲市高三教學(xué)質(zhì)量統(tǒng)一檢測(一) 語文試題(含答案)
- 2025版汽車零部件銷售訂購合同(年度版)
- 二零二五年度汽車試駕場地安全使用合同3篇
- 二零二五年度環(huán)保印刷材料委托生產(chǎn)合同3篇
- 酒店托管合同的管理技巧
- 二零二五年度個人二手房買賣合同貸款事宜處理細(xì)則
- 二零二五年度環(huán)保水泵設(shè)施承包項目合同2篇
- 2025版電子商務(wù)B2B購銷合同:數(shù)據(jù)驅(qū)動市場分析與決策3篇
- 勵志課件-如何做好本職工作
- 2024年山東省濟南市中考英語試題卷(含答案解析)
- 2024年社區(qū)警務(wù)規(guī)范考試題庫
- 2024年食用牛脂項目可行性研究報告
- 靜脈治療護理技術(shù)操作標(biāo)準(zhǔn)(2023版)解讀 2
- 2024年全國各地中考試題分類匯編(一):現(xiàn)代文閱讀含答案
- 2024-2030年中國戶外音箱行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- GB/T 30306-2024家用和類似用途飲用水處理濾芯
- 家務(wù)分工與責(zé)任保證書
- 武強縣華浩數(shù)控設(shè)備科技有限公司年產(chǎn)9000把(只)提琴、吉他、薩克斯等樂器及80臺(套)數(shù)控雕刻設(shè)備項目環(huán)評報告
- 安全生產(chǎn)法律法規(guī)匯編(2024年4月)
評論
0/150
提交評論