




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第8章 文件長春理工大學計算機科學技術學院主要內容8.1 文件的有關概念8.2 流的創(chuàng)建與撤銷8.3 文件的順序讀寫8.4 文件的隨機讀寫8.5 文件操作的出錯檢測8.1 文件的有關概念8.1.1 文件及其分類 文件:存儲在外部介質上數(shù)據(jù)的集合,是操作系統(tǒng)數(shù)據(jù)管理的單位。 程序設計有關的文件分類:源程序文件、目標程序文件、可執(zhí)行程序文件和數(shù)據(jù)文件等。 本章主要討論數(shù)據(jù)文件,即如何將程序處理的數(shù)據(jù)組織成文件保存到外部介質上,以及怎樣從外部介質上讀取這些數(shù)據(jù)。使用數(shù)據(jù)文件的目的1、數(shù)據(jù)文件的改動不引起程序的改動程序與數(shù)據(jù)分離2、不同程序可以訪問同一數(shù)據(jù)文件中的數(shù)據(jù)數(shù)據(jù)共享3、能長期保存程序運行的中
2、間數(shù)據(jù)或結果數(shù)據(jù)8.1 文件的有關概念文件分類按文件的邏輯結構:記錄文件:由具有一定結構的記錄組成(定長和不定長)流式文件:由一個個字符(字節(jié))數(shù)據(jù)順序組成(語言將文件看作是由一個一個字節(jié)組成的)。按存儲介質:普通文件:存儲介質文件(磁盤、磁帶等)設備文件:非存儲介質(鍵盤、顯示器、打印機等)按數(shù)據(jù)的組織形式:文本文件: ASCII文件,每個字節(jié)存放一個字符的ASCII碼二進制文件:數(shù)據(jù)按其在內存中的存儲形式原樣存放8.1 文件的有關概念如 short型數(shù)100000010011100010000內存存儲形式0010011100010000二進制形式00 0000001100000011000
3、0ASCII形式文本文件特點:占用空間大、速度慢、便于對字符操作二進制文件特點:占用空間小、速度快、便于存放中間結果8.1 文件的有關概念8.1.2 文件名 一個文件必須有一個文件名。文件名包括三部分:文件路徑、文件名主干和文件名后綴。 文件路徑表明文件的存儲位置。如 f:exe3file1.txt 在C語言程序中,由于反斜杠符()是作為轉義字符的起始符號,因此如果想用反斜杠符時要用兩個反斜杠符表示。即要寫成 f:exe3file1.txt8.1.3 文件的位置指針與讀寫方式 為了進行讀寫,系統(tǒng)要為每個文件設置一個位置指針,用于指向當前的讀寫位置。 當要進行讀或寫時,文件的位置指針的初始值為文
4、件頭。 當要為文件追加數(shù)據(jù)時,文件的位置指針指向文件尾。 在ASCII文件中,通常,每進行一次讀或寫,位置指針就自動加1,指向下一個字符位置,為下一次讀或寫作準備,形成順序讀寫方式。8.2 流的創(chuàng)建與撤銷 8.2.1 FILE類型指針 FILE類型 FILE類型指針 標準文件8.2.1 FILE類型指針FILE結構體類型 緩沖文件系統(tǒng)為每個正使用的文件在內存開辟文件信息區(qū)文件信息用系統(tǒng)定義的名為FILE的結構體描述FILE定義在stdio.h中typedef struct short level; /* 緩沖區(qū)“滿”或“空”的程度 */ unsigned flags; /* 文件狀態(tài)標志*/
5、char fd; /* 文件描述符 */ unsigned char hold; /* 如無緩沖區(qū)不讀取字符 */ short bsize; /* 緩沖區(qū)大小*/ unsigned char *buffer; /* 緩沖區(qū)的位置 */ unsigned char *curp; /* 指針,當前的指向 */ unsigned istemp; /* 臨時文件,指示器 */ short token; /* 用于有效性檢查 */ FILE; FILE類型指針指針變量說明: FILE *fp;用法:文件打開時,系統(tǒng)自動開辟文件結構體變量,用來存放文件的相關信息,并把該變量的指針返回來,程序通過這個指針獲
6、得文件信息,訪問文件。文件關閉后,它的文件結構體變量被釋放。8.2.1 FILE類型指針程序數(shù)據(jù)區(qū)輸入緩沖區(qū)輸出緩沖區(qū)外部介質文件處理方法緩沖文件系統(tǒng):高級文件系統(tǒng),系統(tǒng)自動為正在使用的文件開辟內存緩沖區(qū)非緩沖文件系統(tǒng):低級文件系統(tǒng),由用戶在程序中為每個文件設定緩沖區(qū)緩沖文件系統(tǒng):8.2.2 流 建立了與文件相應的流,與該文件相應的文件結構體變量(即文件的信息區(qū))才會有具體的值,F(xiàn)ILE類型的指針也就會指向相應的文件的結構體變量。文件1的信息區(qū)fp1文件2的信息區(qū)fp2文件3的信息區(qū)fp38.2.2 流C文件操作用庫函數(shù)實現(xiàn),包含在stdio.h文件使用方式:打開文件-文件讀/寫-關閉文件8.
7、2.3 文件的打開與關閉流的創(chuàng)建與撤銷8.2.3 文件的打開與關閉流的創(chuàng)建與撤銷1. 文件的打開 fopen (文件名,文件操作方式);功能:按指定方式打開文件返回值:正常打開,返回一個FILE類型的指針值;打開失敗,為NULL值。操作方式操作方式符號對文本文件對二進制文件讀打開rrb寫生成wwb追加aab讀寫打開r+rb+/r+b讀寫生成w+wb+/w+b讀寫追加a+ab+/a+b8.2.3 文件的打開與關閉流的創(chuàng)建與撤銷文件操作方式例 文件打開與測試 FILE *fp; fp=fopen(“aa.c”,“w”); if(fp=NULL) printf(“File open error!n”
8、); exit(0); 例 FILE *fp; char *filename=“test.dat” fp= fopen(filename,”r”); 例 FILE *fp; fp= fopen (“test.dat”, “r”); 8.2.3 文件的打開與關閉流的創(chuàng)建與撤銷2. 文件的關閉 fclose(文件指針變量)功能:關閉fp指向的文件返值:正常關閉為0;出錯時,非0作用:使文件指針變量與文件“脫鉤”,釋放文件結構體變量,指針變量也不再指向該文件。例如: FILE *fp; fp=fopen(data.c,r); fclose(fp);/*關閉fp所指向的文件*/8.2.3 文件的打開與
9、關閉流的創(chuàng)建與撤銷8.3 文件的順序讀寫8.3.1 文件的字符讀寫8.3.2 文件的字符串讀寫8.3.3 文件的格式化讀寫8.3.4 文件的記錄讀寫8.3.1 文件的字符讀寫 fputc調用方式: fputc( ch, fp)功能:把ch中一個字符寫入fp指向的文件中返值:正常,返回所寫字符;出錯,為EOF(-1)fgetc調用方式: fgetc(fp)功能:從fp指向的文件中讀取一個字符返值:正常,返回讀取的字符;讀到文件尾或出錯,為EOF8.3.1 文件的字符讀寫#include #include int main(void)FILE *fp;int ch;if (fp=fopen(“f:
10、C3exfile1.txt”,”w”)=NULL)printf(“cannot open this file.n”);exit(1);while (ch=getchar()!=n)fputc(ch,fp);fclose(fp); return 0;運行情況如下,當鍵入: I love China.時,這些字符將逐個被輸出到磁盤文件file1.txt中。例8.18.3.1 文件的字符讀寫#include #include int main(void)FILE *fp;char ch;if ( fp=fopen(“f:C3exfile1.txt”,”r”)=NULL) printf(“cannot
11、 open this file.n”); exit(1); while ( ch=fgetc(fp)!=EOF) putchar(ch);fclose(fp);return 0;程序運行顯示如下結果:I love China.例8.2while (!feof(fp) ch=fgetc(fp); putchar(ch);fgets(s, n,fp)fputs(s,fp)功能:從fp指向的文件讀/寫一個字符串返值:fgets正常時返回讀取字符串的首地址;出錯或文件尾,返回NULLfputs正常時返回非負值;出錯為EOFfgets從fp所指文件讀n-1個字符送入s指向的內存區(qū),并在最后加一個0(若讀
12、入n-1個字符前遇換行符或文件尾(EOF)即結束)調用方式:fputs把s指向的字符串寫入fp指向的文件fputs(china,fp);fgets(str,n,fp);8.3.2 文件的字符串讀寫8.3.2 文件的字符串讀寫#include #include #include int main(void)FILE *fp;char string81;if (fp=fopen(“f:C3exefile2.txt”,”w”)=NULL) printf(“cant open file”);exit(1); while (strlen (gets(string)0) fputs(string, fp)
13、;fputs(“n“,fp);fclose(fp);return 0;例8.5fscanf(文件指針,格式字符串,地址表);fprintf(文件指針,格式字符串,輸出表);功能:按格式對文件進行I/O操作返值:成功,返回I/O的個數(shù);出錯或文件尾,返回EOF例 fprintf(fp,“%d,%6.2f”,i,t); /將i和t按%d,%6.2f格式輸出到fp文件 fscanf(fp,“%d,%f”,&i,&t); /若文件中有3,4.5 ,則將3送入i, 4.5送入t調用方式:8.3.3 文件的格式化讀寫#include #include #include int main(void)FILE
14、 * fp;char name20;int num;float score;if (fp=fopen(“f:C3exefile3.txt”,”w”)=NULL)printf(“cant open file”);exit(1); 8.3.3 文件的格式化讀寫例8.6printf(“type name,num,score:”);scanf(“%s %d %f”,name,&num,&score);while (strlen (name)1)fprintf(fp,“%s %d %f”,name, num, score);printf(“type name, num, score:”); scanf(
15、“%s %d %f”,name, &num, &score);fclose (fp);return 0;8.3.3 文件的格式化讀寫將數(shù)據(jù)文件file3.txt的數(shù)據(jù)讀回程序并輸出到屏幕上#include #include int main()FILE *fp;char name20;int num;float score;if (fp=fopen(“f:c3exefile3.txt”,”r”)=NULL) printf(“cant open file”); exit(1); while (fscanf(fp, “%s %d %f”,name, &num, &score)!=EOF)print
16、f(“%-20s %6d %6.2fn”, name, num, score);fclose (fp);return 0;8.3.3 文件的格式化讀寫8.3.4 文件的記錄讀寫fread(buffer, size, count, fp);fwrite(buffer, size, count, fp);功能:讀/寫數(shù)據(jù)塊返值:成功,返回讀/寫的塊數(shù);出錯或文件尾,返回0說明:用法:fp-文件指針。buffer-是一個指針。對fread來說,是讀入數(shù)據(jù)存放地址, 對fwrite來說,是輸出數(shù)據(jù)的地址。size-數(shù)據(jù)塊的字節(jié)數(shù)。count-要讀寫多少個size字節(jié)的數(shù)據(jù)塊。例 float f2; F
17、ILE *fp; fp=fopen(“aa.dat”,“rb”); fread(f,4,2,fp);for(i=0;i2;i+) fread(&fi,4,1,fp);例 struct student int num; char name20; char sex; int age; float score3; stud10; for(i=0;i0 前進移動0 后退移動起始點文件開始 SEEK_SET 0文件當前位置 SEEK_CUR 1文件末尾 SEEK_END 2例 fseek(fp,100L,0); fseek(fp,50L,1); fseek(fp,-10L,2); 8.4.1 文件位置指
18、針的定位2. ftell函數(shù)用法:fell(文件指針);功能:返回位置指針當前位置(用相對文件開頭的位移量表示)返值:成功,返回當前位置指針位置;失敗,返回-1L。8.4.1 文件位置指針的定位3. rewind函數(shù)用法: rewind(文件指針);功能:重置文件位置指針到文件開頭8.4.1 文件位置指針的定位例 對一個磁盤文件進行顯示和復制兩次操作#include main() FILE *fp1,*fp2; fp1=fopen(“file1.c,r); fp2=fopen(“file2.c,w); while(!feof(fp1) putchar(fgetc(fp1); rewind(fp
19、1); while(!feof(fp1) fputc(fgetc(fp1),fp2); fclose(fp1); fclose(fp2);8.4.1 文件位置指針的定位8.4.2 文件隨機讀寫程序舉例例:求文件長度#includestdio.h main() FILE *fp; long length; fp=fopen(“e:wanga.txt”,r); if(fp=NULL) printf(file not found!n); else fseek(fp,0L,SEEK_END); length=ftell(fp); printf(Length of File is %1d bytesn,
20、length); fclose(fp); 以下程序的功能是( )。#includemain() FILE *fp; fp=fopen(“abc.txt, r+); while(!feof(fp) if(fgetc(fp)=*) fseek(fp,-1L,SEEK_CUR); fputc($,fp); fseek(fp,ftell(fp),SEEK_SET); fclose(fp);A. 將abc文件中所有*替換為$ B. 查找abc文件中所有*C. 查找abc文件中所有$ D. 將abc文件中所有字符替換為$A練習題. 下面的程序執(zhí)行后,文件testxt.t中的內容是( )。 #include
21、 void fun(char *fname,char *st) FILE *myf; int i; myf=fopen(fname,w ); for(i=0;istrlen(st); i+) fputc(sti,myf); fclose(myf); main() fun(test.txt,new world); fun(test.txt,hello,); A. hello, B. new worldhello, C. new world D. hello, rldA用W方式:如果原來不存在該文件,則打開時新建一個文件,如果原來已經(jīng)存在,則打開時將該文件刪除,重新建立一個文件.程序運行后的輸出結果是( )。#include main() FILE *fp; int i=20,j=30,k,n; fp=fopen(d1.dat, w); fprintf(fp, %dn,i); fprin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勵志詩歌合集
- 秘書年終工作總結
- 微軟軟件購買合同
- 學校供餐服務合同
- 2024年份2月份裝修合同石膏板吊頂接縫處防開裂工藝
- 廣告拍攝合同范本
- 山東省豬肉入市場廠掛鉤合同
- 2025【英文合同】英文租賃合同范本
- 90代土地出讓合同標準文本
- 增強財務創(chuàng)新能力的工作安排計劃
- 企業(yè)勞動關系課件
- 河南省豫西北教研聯(lián)盟(洛平許濟)2024-2025學年高三第二次質量檢測數(shù)學試題
- T-SDFA 048-2024 混合型飼料添加劑中二硝托胺的測定 液相色譜-串聯(lián)質譜法
- 車間規(guī)則制度培訓
- 2024-2025學年上海市八年級語文下學期3月練習試卷附答案解析
- 2025年遼寧醫(yī)藥職業(yè)學院單招職業(yè)適應性測試題庫附答案
- 指向地理綜合思維培養(yǎng)的學科融合教學策略研究
- TSJNX 001-2024 低碳近零碳園區(qū)評價規(guī)范
- 第三單元第三課信息檢索的方法教學設計 2024-2025學年西交大版(2024)初中信息技術七年級上冊
- 2024山西云時代技術有限公司社會招聘59人筆試參考題庫附帶答案詳解
- 2025年江蘇省高職單招《職測》高頻必練考試題庫400題(含答案)
評論
0/150
提交評論