lesson20數(shù)據(jù)的組織結(jié)構(gòu)二文件ppt課件_第1頁
lesson20數(shù)據(jù)的組織結(jié)構(gòu)二文件ppt課件_第2頁
lesson20數(shù)據(jù)的組織結(jié)構(gòu)二文件ppt課件_第3頁
lesson20數(shù)據(jù)的組織結(jié)構(gòu)二文件ppt課件_第4頁
lesson20數(shù)據(jù)的組織結(jié)構(gòu)二文件ppt課件_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、Lesson 20 數(shù)據(jù)文件及其操作1輸入/輸出的概念及學習目的31學會讀寫數(shù)據(jù)文件操作系統(tǒng)的規(guī)范輸入/輸出設備:鍵盤/顯示器假設需求改動輸入/輸出的流向,需求重定向另一個輸入/輸出的對象就是磁盤數(shù)據(jù)文件運用數(shù)據(jù)文件來建立程序中的數(shù)據(jù)或保管數(shù)據(jù)到文件中,是C程序設計的習慣用法。23文件的概念2文件:是指一組相關數(shù)據(jù)的有序集合。 這個數(shù)據(jù)集有一個稱號,叫做文件名。操作系統(tǒng)是以文件為單位對數(shù)據(jù)進展管理的。 例如:C:24000101program.c,其中k:24000101叫途徑,program.c是文件名。當需求運用文件的時候,需求將文件調(diào)入內(nèi)存中。 33C言語中運用的數(shù)據(jù)文件的概念2從文件編

2、碼和數(shù)據(jù)的組織方式來看,數(shù)據(jù)文件可分為ASCII碼文件和二進制碼文件。 也叫文本文件 文件程序數(shù)據(jù)區(qū)輸出文件緩沖區(qū)輸入文件緩沖區(qū)磁盤上內(nèi)存中操作系統(tǒng)在內(nèi)存中的緩沖區(qū)43文件的概念2ASCII數(shù)據(jù)文件:文件在磁盤中存放時每個字符占一個字節(jié),每個字節(jié)存放相應字符的ASCII碼值。二進制數(shù)據(jù)文件:存儲介質(zhì)上保管的數(shù)據(jù)采用與內(nèi)存數(shù)據(jù)一致的表示方式存儲(為二進制方式。 例: 在文件中存放整數(shù)2147483647ASCII碼32H31H34H37H34H38H33H36H34H37H二進制FFHFFHFFH7FH言語把文件看作是一個字符字節(jié)的序列,即由一個一個字符字節(jié)的數(shù)據(jù)順序組成。一個輸入輸出流就是一個

3、字節(jié)流或二進制流。 5 文件的位置指針位置指針用來指示當前的讀寫位置。 普通情況下,在對字符文件進展順序讀寫時,文件的位置指針指向文件開頭,這時假設對文件進展讀的操作,就讀第一個字符,然后文件的位置指針順序向后移一個位置,在下一次執(zhí)行讀的操作時,就將指針指向的第二個字符讀入。依此類推,直到遇文件尾. 文件頭 讀寫當前位置 文件尾有時希望在一個文件的原有數(shù)據(jù)之后再添加新的數(shù)據(jù),應該把文件位置指針移到文件尾,然后再接著寫入新的數(shù)據(jù),這就是文件的追加。63文件的操作3文件的根本操作 定義文件指針 定義格式為:FILE * 文件指針變量; 例如 FILE *fp; FILEf5;文件的翻開 文件指針

4、= fopen文件名,操作方式fp = fopen(c:file.dat, r);if (fp= NUUL) printf(“nCannot open the file); return 1; 73文件的操作3文件使用方式含 義r只讀,文本以只讀方式打開一個已有的文本文件。w只寫,文本以只寫方式建立一個新的文本文件。如果該文件已存在則將它刪去,然后重新建立一個新文件。a追加,文本以添加方式打開一個文本文件,在文件末尾添加。如果該文件不存在,則建立一個新文件后再添加。rb只讀,二進制以只讀方式打開一個已有的二進制文件。wb只寫,二進制以只寫方式打開一個二進制文件。ab追加,二進制以添加方式打開一

5、個二進制文件。83文件的操作3翻開文件文件方式文件使用方式含 義r+讀寫,文本以讀寫方式打開一個已有的文本文件。w+讀寫,文本以讀寫方式建立一個新的文本文件。a+讀寫,文本以讀寫方式打開一個文本文件,在文件末尾添加和修改,如果文件不存在,則建立一個新文件后再添加和修改。rb+讀寫,二進制以讀寫方式打開一個已有的二進制文件。wb+讀寫,二進制以讀寫方式建立一個新的二進制文件。ab+讀寫,二進制以讀寫方式打開一個二進制文件。93文件的操作3文件的封鎖 fclose文件指針; 例如:fclose(fp); 文件的讀寫操作字符讀寫函數(shù) :fgetc( )和fputc( )字符串讀寫函數(shù):fgets(

6、)和fputs( )數(shù)據(jù)塊讀寫函數(shù):fread( )和fwrite( )格式化讀寫函數(shù):fscanf( )和fprinf( ) 前往值:封鎖勝利前往值為;否那么前往EOF(-1) 103文件的操作4字符讀寫操作 1、fgetc( )的調(diào)用格式: 字符型變量= fgetc( 文件指針 ); 例如:ch = fgetc(fp);語句功能是:從fp指向的文件中讀取一個字符并將這個字符賦給char型變量ch 。遇終了,前往EOF。2、fputc( )的調(diào)用格式: fputc(字符,文件指針); 例如: fputc(ch, fp); 語句功能是:將字符型變量ch的內(nèi)容寫入文件指針fp所指的文本文件中。寫

7、入勝利,前往字符本身,反之EOF。11讀文件根本過程 #include stdio.hint main()int i,x;FILE * fp ;fp=fopen(array.txt,r);if(fp=NULL)printf(文件不存在);exit(0);printf(從文件中讀取的數(shù)據(jù):n);for(i=1;i10;i+)fscanf(fp,%d,&x);if(i%5=0) printf(n);printf(%4d,x); fclose(fp);return 0;1、定義FILE 指針2、翻開文件3、確保文件有效4、用函數(shù)讀文件5、封鎖文件寫文件根本過程 #include stdio.hint

8、 main()int i,x;FILE * fp ;fp=fopen(array2.txt,“w);if(fp=NULL)printf(文件不存在);exit(0);printf(從文件中讀取的數(shù)據(jù):n);for(i=1;i10;i+)scanf(%d,&x);fprintf(fp,%4d,x); fclose(fp);return 0;1、定義FILE 指針2、翻開文件3、確保文件有效4、用函數(shù)往文件寫數(shù)據(jù)5、封鎖文件a和w的區(qū)別 #include stdio.hint main()int i,x;FILE * fp ;fp=fopen(array.txt,“a);if(fp=NULL)pr

9、intf(文件不存在);exit(0);printf(從文件中讀取的數(shù)據(jù):n);for(i=1;i10;i+)scanf(%d,&x);fprintf(fp,%4d,x); fclose(fp);return 0;翻開文件方式二進制文件和文本文件 #include stdio.hint main()int i,x;FILE * fp ;fp=fopen(array4.txt,wb);if(fp=NULL)printf(文件不存在);exit(0);printf(將從鍵盤輸入數(shù)據(jù)寫入文件:n);scanf(%d,&x);fwrite(&x,sizeof(x),1,fp);fclose(fp);r

10、eturn 0;#include stdio.hint main()int i,x;FILE * fp ;fp=fopen(array5.txt,w);if(fp=NULL)printf(文件不存在);exit(0);printf(將從鍵盤輸入數(shù)據(jù)寫入文件:n);scanf(%d,&x);fprintf(fp,%d,x);fclose(fp);return 0;二進制文件和文本文件 20_e.c3文件的操作4例1:讀取一個給定的文本文件,并將文件的內(nèi)容顯示在屏幕上。 問題分析需求讀取文本文件,所以以“r操作方式將文件翻開。 文本文件的終了標志為EOF-1。當文件讀寫指針指向EOF時,表示文件曾

11、經(jīng)讀到了尾部。因此,在讀文件時,需求設計一個while循環(huán)語句,它的終了條件是讀取的字符等于EOF。需求讀取的文件稱號經(jīng)過命令行參數(shù)帶入,這樣可以擴展程序的運用范圍,添加程序運轉(zhuǎn)的靈敏性。17算法描畫 開場終了ch!=EOF非空行NNargs!=2輸出提示信息輸出chYYYN翻開不勝利輸出提示信息fgetc()chfclose()fgetc()ch18#include int main( ) FILE *fp; int ch; char name100; printf(“請輸入文件名:n) ; gets(name); fp=fopen(name,r); if(fp= NULL ) /* 翻開文

12、件 */ printf(Cannot open file !); return 1; ch = fgetc(fp); /* 以字符方式讀取文件 */ while (ch!=EOF) putchar(ch); ch = fgetc(fp); fclose(fp); /* 封鎖文件 */ return 0;193文件的操作4字符串讀寫操作 1、fgets( )的調(diào)用格式: fgets(字符數(shù)組名,n,文件指針); 例如:fgets(str, n, fp);語句功能是:從fp所指的文件中讀出n-1個字符并存入字符數(shù)組str中。2、fputs ( )的調(diào)用格式: fputs(字符串,文件指針) ; 例

13、如: fputs(“C program, fp);語句功能是:將字符串“C program寫入fp所指的文件中。 203文件的操作4例2:編程從鍵盤輸入一個源文件的文件名和一個目的文件的文件名,將源文件的內(nèi)容拷貝到目的文件中。21#include int main() FILE *fp1,*fp2; char str20,srcName20,desName20; gets(srcName);gets(desName); if(fp1=fopen(srcName,r)=NULL) printf(file1 openned error.n); exit(0); if(fp2=fopen(desNa

14、me,w)=NULL) printf(file2 created error.n); exit(0); while(fgets(str,20,fp1)!= NULL) fputs(str,fp2); fclose(fp1); fclose(fp2); return 0;22#include #include int readFile( char lines 80);void writeFile(char lines 80, int n );main( ) int choice, num; char lines10080; do /*顯示菜單*/ printf(n = MENU =n); pri

15、ntf(n read file.1); printf(n write file.2); printf(n exit.3); printf(n select:); scanf(“%d,&choice); getchar(); /*用戶選擇*/ if (choice=1)num = readFile(lines); if (choice=2) writeFile(lines, num);while (choice!=3);例3:P214例6-1323int readFile(char lines 80) * 讀文件*/ int i; FILE *fp; char filename30; print

16、f(“nEnter file name:); /* 輸入要進展寫操作的文件名*/ gets(filename); if(fp=fopen(filename,“r)=NULL) /* 翻開文件*/ printf(Cannot open file!); return 0; for (i=0; !feof(fp); i+) /* 讀取并顯示文件*/ fgets(&linesi0, 80, fp); puts(&linesi0); fclose(fp); return i;24void writeFile(char lines 80, int n) /* 寫文件 */ FILE *fp; char f

17、ilename30; printf(“nEnter file name:); /* 輸入要進展寫操作的文件名*/ gets(filename); if(fp=fopen(filename, “w) = NULL) /* 翻開文件*/ printf(Cannot open file!); return; while( n!=0 ) fputs(&lines-n0, fp); /*寫出一行字符串*/ fprintf(fp,n); fclose(fp); /* 封鎖文件 */253文件的操作4數(shù)據(jù)塊讀寫操作 1、 fread( )的調(diào)用格式: fread(buffer, size, count, f

18、p); 例如:fread(buffer, sizeof(int), 5, fp); ;語句功能是:從fp所指的文件中讀取5塊數(shù)據(jù)并放在buffer中,每塊數(shù)據(jù)的大小為int類型占用的字節(jié)數(shù)量。2、 fwrite ( )的調(diào)用格式: fwrite(buffer, size, count, fp); 例如: fwrite(buffer, sizeof(float), 5, fp) ;語句功能是:將buffer中存放的數(shù)據(jù)寫入fp所指的文件中,共寫入5塊數(shù)據(jù),每塊數(shù)據(jù)的大小為float類型占用的字節(jié)數(shù)量。 輸入輸出的內(nèi)容都為二進制方式263文件的操作4例4:從鍵盤輸入學生根本信息,寫入二進制文件;再

19、從該文件中讀取學生根本信息,并顯示輸出。 問題分析假設學生根本信息只包含學號、姓名、所屬院系和專業(yè)幾個數(shù)據(jù)項,為此,需求定義一個構(gòu)造類型。輸入學生信息的時候,將一切數(shù)據(jù)項存放在一個構(gòu)外型變量中,并以二進制的方式寫入文件;在讀取文件的時候,每次讀取一個構(gòu)造類型變量的字節(jié)數(shù)目,這樣可以很輕松地實現(xiàn)將構(gòu)外型數(shù)據(jù)存儲到磁盤文件中的操作。 27#include #define NUM 30typedef struct info /* 表示學生根本信息的構(gòu)造類型 */ int No; /* 學號 */ char name16; /* 姓名 */ char department32; /* 所屬院系 */

20、char major32; /* 所學專業(yè) */ INFO;28int main( ) INFO s; int i; FILE *fp; char filename32; printf(nEnter filename:); /* 輸入文件名 */ gets(filename); if (fp=fopen(filename, wb) = NULL) /* 以二進制寫方式翻開文件 */ printf(Cannot open %s file., filename); return 1; 29for (i=0; iNUM; i+) /* 經(jīng)過鍵盤輸入學生信息并寫入文件 */ scanf(%d%s%s%

21、s, &s.No, , s.department, s.major); fwrite(&s, sizeof(INFO), 1, fp); fclose(fp); /* 封鎖文件 */ if (fp=fopen(filename, rb) = NULL) /* 以二進制讀方式翻開文件 */ printf(nCannot open %s file., filename); return 1; while (fread(&s, sizeof(INFO), 1, fp) /* 從文件中讀信息并顯示輸出 */ printf(n%4d%16s%20s%20s, s.No, , s.

22、department, s.major); fclose(fp); /* 封鎖文件 */ return 0;303文件的操作4格式化讀寫操作 1、 fscanf( )的調(diào)用格式: fscanf(文件指針,格式字符串,輸入列表); 例如: fscanf(fp, %d%f, &i, &j) ;語句功能是:從fp所指的文件中按照格式控制的描畫讀取一個整型數(shù)值給i,一個單精度數(shù)值給j。2、 fprintf ( )的調(diào)用格式: fprintf(文件指針,格式字符串,輸出列表); 例如: fprintf(fp, %d%f, i, j);語句功能是:將i、j的內(nèi)容按照格式控制的描畫寫入fp所指的文件中。 輸

23、入輸出的內(nèi)容都為ASCII碼值制方式留意:用fprintf和fscanf函數(shù)對磁盤文件讀寫,運用方便,容易了解,但由于在輸入時要將ASCII碼轉(zhuǎn)換為二進制方式,在輸出時又要將二進制方式轉(zhuǎn)換成字符,破費時間比較多。因此,在內(nèi)存與磁盤頻繁交換數(shù)據(jù)的情況下,最好不用fprintf和fscanf函數(shù),而用fread和fwrite函數(shù)。313文件的操作4例5:從鍵盤輸入一個源文件的稱號和一個目的文件的稱號,在源文件中存放了一個計算式(留意沒有空格). 例如1+2 程序的功能是從源文件中讀取該式,并計算其結(jié)果,將式子和結(jié)果以如下款式輸出 1+2=332#include int main() FILE *f

24、p1, *fp2; char srcName20,desName20,op; float src1,src2,result; printf(請輸入源文件名:n); gets(srcName); printf(請輸入目的文件名:n); gets(desName); if(fp1=fopen(srcName,r)=NULL) printf(file1 openned error.n); exit(0); if(fp2=fopen(desName,w)=NULL) printf(file2 created error.n); exit(0); fscanf(fp1,%f%c%f,&src1,&op,

25、&src2); 33 switch(op) case +: result=src1+src2; break; case -: result=src1-src2; break; case *: result=src1*src2; break; case /: result=src1/src2; fprintf(fp2,%f%c%f=%f,src1,op,src2,result); fclose(fp1); fclose(fp2); return 0;34#include #define NUM 30typedef struct info /* 表示學生根本信息的構(gòu)造體類型*/int No;cha

26、r name16;char department32;char major32;INFO;例6:P219 例6-1535main( )INFO s;int i;FILE *fp;char filename32;printf(“nEnter file name:); /* 輸入文件名 */gets(filename); /* 以寫方式翻開文件*/if (fp=fopen(filename, w) = NULL) printf(nCannot open %s file., filename);return 1;36 /* 按照格式控制輸入學生信息并寫入文件*/ for (i=0; iNUM; i+

27、) printf(n Enter No, name, department, major); scanf(%d%s%s%s, &s.No, , s.department, s.major); fprintf(fp, %d %s %s %sn, s.No, , s.department, s.major); fclose(fp); /* 封鎖文件 */ if (fp=fopen(filename, “r)=NULL) /* 以讀方式翻開文件*/ printf(nCannot open %s file.,filename); return 1; while (!feof(f

28、p) /* 按格式控制從文件讀取并顯示*/ fscanf(fp, %d%s%s%sn, &s.No, , s.department, s.major); printf(n%4d%16s%20s%20s, s.No, , s.department, s.major); fclose(fp); /* 封鎖文件 */373課堂練習5知在一個resouce.txt文件中,第一行放了一個,表示第二行放的數(shù)的個數(shù) 例如:對該文件的第二行中的一切數(shù)據(jù)求和,保管在文件result.txt#include int main( )int i,n=0,m,sum=0;FILE *fp;if

29、(fp=fopen(k:2021-2021-2cresouce.txt, r) = NULL) printf(nCannot openfile.);return 1;fscanf(fp,%d,&n);printf(n=%dn, n);for (i=0; in; i+) fscanf(fp,%d, &m);sum+=m;printf(sum=%dn, sum);fclose(fp); if (fp=fopen(k:2021-2021-2cresult.txt, w) = NULL) printf(nCannot openfile.);return 1;fprintf(fp,%d, sum);fclose(fp);return 0; 38順序讀寫:位置指針按字節(jié)位置順序挪動。隨機讀寫:讀寫完上一個字符字節(jié)后,并不一定要讀寫其后續(xù)的字符字節(jié),而可以讀些文件中恣意位置上所需求的字符字節(jié)。1.文件位置指針的定位C言語提供以下有關函數(shù)使位置指針指向指定的位置:(1)rewind函數(shù)函數(shù)功能:是使位置指針重新前往文件的開頭,此函數(shù)沒有前往值。 3數(shù)據(jù)文件的隨機讀寫539例:有一個磁盤文件,第一次將它的內(nèi)容顯示在屏幕上,第二次把它復制到另一文件上。 #include main()FI

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論