c語言課件10文件_第1頁
c語言課件10文件_第2頁
c語言課件10文件_第3頁
c語言課件10文件_第4頁
c語言課件10文件_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第10章 文件學習背景:1、為了保存數(shù)據(jù)。 2、便于對大量數(shù)據(jù)加工處理。 教學內容: 文件的概述 文件指針 文件的打開與關閉 文件的讀寫操作 文件的其它一些常用函數(shù)教學重點: ASCII碼文件與二進制文件的特點 文件指針 文件打開與關閉 文件的讀寫操作教學難點: 文件中的函數(shù)使用文件的定義:存儲在計算機外部存儲器中的數(shù)據(jù)的集合。文件分類按存儲介質:普通文件:存儲介質文件 (磁盤、磁帶等)設備文件:非存儲介質 (鍵盤、顯示器、打印機等) ASCII文件也稱為文本文件,它是將數(shù)據(jù)看作是一個一個的字符,把它們的ASCII碼分別存放到文件中的。 ASCII文件的定義:eg10.1:數(shù)據(jù)12345 ,以

2、ASCII碼文件形式存放,怎么存放?將12345看作是5個字符: 字 符: 1 2 3 4 5 ASCII碼: 49 50 51 52 53二進制: 00110001 00110010 00110011 00110100 00110101 二進制文件,它是將數(shù)據(jù)按其在內存中的存儲形式原樣存放在文件中。二進制文件的定義:eg10.2:數(shù)據(jù)12345,以二進制文件形式存放,怎么存放?數(shù)值12345在內存中的存放形式為: 00110000001110010011000000111001所以數(shù)據(jù)10000以二進制文件形式存放為: 它是將數(shù)據(jù)12345在內存中的存放形式,按原樣輸出到文件中存放。ASCI

3、I碼文件與二進制文件的不同 特點:不需要需要是否進行ASCII碼與二進制間轉換不便方便輸入輸出比較少比較多占用空間二進制文件ASCII碼文件 文件類型比較項緩沖文件系統(tǒng)的定義: 在打開文件時,系統(tǒng)自動地在內存中為每個正在使用的文件開辟一個緩沖區(qū),通過緩沖區(qū)對文件進行相關操作。程序數(shù)據(jù)區(qū)磁盤輸出文件緩沖區(qū)輸出文件緩沖區(qū)輸入輸入緩沖文件系統(tǒng)的工作特點:非緩沖文件系統(tǒng)的定義: 在處理文件時,系統(tǒng)不自動開辟確定大小緩沖區(qū),而由程序員自行設計并管理。typedef struct unsigned char *curp; /*讀寫位置指針*/ FILE; 文件類型聲明:(4)通過文件指針關閉文件; 文件的

4、基本操作過程:(1)首先定義一個文件類型指針;(2)通過文件名打開文件,并為文件 指針賦值;(3)通過文件指針對文件進行讀寫及其 它操作;文件打開中的注意事項:1、賦值問題: 正常打開一個文件,賦的值就是分配的這個文件緩沖區(qū)的地址(或稱為指針)。 文件打開失敗,賦的就是一個空指針NULLif(fpfopen(“f1.c”,“r”)=NULL) printf(“Cannot open the file.n”);exit(0);exit()函數(shù)的功能:關閉已打開的所有文件,結束程序運行,返回操作系統(tǒng),并將“程序狀態(tài)值”返回給操作系統(tǒng),exit(0),表示程序正常退出,exit(非零值)表示程序出錯

5、后退出。 文件打開中的注意事項:2、 “文件名”: 文件名是一個字符串,是要打開文件的文件名字,可以包含盤符、路徑、文件名、擴展名等, 注意: 在C語言中呢,“”是轉義字符的標志,所以要要輸出“”,必須要寫成“”的形式。 例如:要打開文件名為“c:tcw1.c” 我們要寫成: FILE *fpt fpt=fopen(c:tcw1.c,rb)文件打開中的注意事項:3、“文件打開的方式”: 最基本的處理文件的方式就是“取”、“寫入”、“追加”等,此外還有“讀取/寫入”、“寫入/讀取”“讀取/追加”等。 mode處理方式當文件不存在時當文件存在時向文件輸入從文件輸出 “r” 讀 取出錯打開文件不能可

6、以 “w” 寫 入建立新文件覆蓋原有文件可以不能 “a” 追 加建立新文件在原有文件后追加可以不能“r”讀取寫入出錯打開文件可以可以“w”寫入讀取建立新文件覆蓋原有文件可以可以“a”讀取追加建立新文件在原有文件后追加可以可以 二進制文件,只要在模式后面加一個“b”字符。如:“rb”、“rb”文件打開中的注意事項:4、讀取文本文件時,會自動將“回車”、“換行”兩個符號轉換為一個“換行符”,在寫入時,又會自動將一個“換行符”轉換為“回車”和“換行”兩個字符。 在用二進制文件時,不會進行這種轉換。文件打開中的注意事項:5、一個文件類型指針在某一時刻,只能以一種方式打開一個文件。 FILE *fp;f

7、pfopen(“test1”,“r”);fpfopen(“test2”,“w”);fclose()的說明:為什么要使用fclose()關閉文件呢?一是:防止丟失數(shù)據(jù)。函數(shù)的返回值:正常完成關閉文件操作時,返回值為0;二是:防止文件被誤用。有錯誤發(fā)生,返回值為非零的數(shù)。eg10.3:求一個文件打開與關閉的實例:以追加的方式打開文件d盤根目錄下面的f1.C文件,如果不能打開,則顯示“不能打開”的提示信息,(中間操作可以不寫),操作完畢后,關閉文件。#include main( )FILE *fp;if (fp=fopen(“f1.txt, a)=NULL) printf(Cannot open f

8、ilen); exit(1); fclose(fp); fp=fopen(“f1.txt, a);if (fp=NULL) printf(Cannot open filen); exit(1); 常用的文件讀寫函數(shù)1、按字符讀寫的函數(shù) fgetc()、fputc()2、按字符串讀寫的函數(shù) fgets()、fputs()4、按格式要求讀寫的函數(shù) fprintf()、fscanf()3、按數(shù)據(jù)塊讀寫的函數(shù) fread()、fwrite()檢測文件是否結束函數(shù)feof(文件指針)一般調用形式:返回值:當文件指針指向文件末尾時,函數(shù)返回值為1,否則返回值0。 字符讀寫函數(shù):一般調用形式為: fputc

9、(字符,文件指針); 字符常量、字符變量例如:fputc(a,fp); char cha;fputc(ch,fp)或是1、寫字符函數(shù)fputc()的使用說明:1、在putc()函數(shù)中,讀取的文件必須 使用寫、讀寫或追加等方式打開。2、注意讀寫位置指針的變化。 3、注意fputc()函數(shù)的返回值及 EOF判斷。 字符讀寫函數(shù):一般調用形式為: 字符變量fgetc(文件指針); 例如: char c; cfgetc(fp); 2、讀字符函數(shù)1、在fgetc()函數(shù)調用中,讀取的文件 必須是以讀或讀寫方式打開的 2、讀取字符的結果也可以不向字符變量 賦值。 如:fgetc(fp); fgetc()的

10、使用說明:文件類型指針 與讀寫位置指針的區(qū)別:1、文件指針是指向整個文件的,須在程序 中定義說明,只要不重新賦值,文件指 針的值是不變的。 2、文件內部的位置指針用以指示文件內部 的當前讀寫位置,每讀寫一次,該指針 均向后移動,它不需在程序中定義說明, 而是由系統(tǒng)自動設置的。 eg10.4:從鍵盤輸入一行字符,寫入一個文件“d:tttx11.c”,再把該文件內容讀出顯示在屏幕上。#includemain() FILE *fp; char ch; if(fp=fopen(d:tttx11.c,w+)=NULL) printf(Cannot open the file!); exit(0); 程序

11、如下:接上頁程序printf(input a string:n); ch=getchar(); while (ch!=n) fputc(ch,fp); ch=getchar(); fclose(fp); fp=fopen(d:tttx11.c,w+ );ch=fgetc(fp); while(ch!=EOF) putchar(ch); ch=fgetc(fp); printf(n);fclose(fp);運行結果:字符串讀寫函數(shù):1、寫字符串函數(shù)一般調用形式為:fputs(字符串,文件指針 )字符串常量、字符數(shù)組、字符串指針變量如: char str10=”hello”; fputs(str,

12、fp); 或是char *p=”hello”;fputs(p,fp); 如果寫入文件成功,則函數(shù)返回值為0,同時將讀寫位置指針向前移動字符串長度個字節(jié);否則,返回非0值。 函數(shù)返回值:字符串讀寫函數(shù):2、讀字符串函數(shù)一般調用形式為:fgets(字符數(shù)組,n1,文件指針 )如: char str10 ; fputs(str,8,fp); 函數(shù)的返回值: 若遇文件結束或出錯,則返回值為NULL。 如果從文件讀取字符時遇到文件尾EOF或換行符,則讀入立即結束。 若讀取成功,則函數(shù)的返回值是字符數(shù)組str的首地址;在已建立的文件f1.txt中追加一組字符串,然后再輸出f1.txt文件的內容。 eg10

13、.5:#includestdio.hmain() FILE *fp; char ch, str20; char string81; if (fp=fopen(f1.txt, a+)=NULL)printf(can not open file!); exit(0);程序如下:fclose(fp); printf(input a string:n);while (strlen( gets(str)0)fputs(str,fp); fputs(n,fp);while (fgets(string, 81, fp)!=NULL)printf(%s,string);接上頁程序fclose(fp); fpf

14、open( f1.txt, a+ );運行結果:數(shù)據(jù)塊讀寫函數(shù):1、寫數(shù)據(jù)塊函數(shù)一般調用形式為:fwrite(buffer , size , count , fp); buffer:要寫入的數(shù)據(jù)的存放的起始地址 可以是數(shù)組名或指向數(shù)組的指針; size:表示一個數(shù)據(jù)塊的字節(jié)數(shù)。 count:表示要寫入文件的數(shù)據(jù)塊的塊數(shù)。 fp:表示文件指針變量。 函數(shù)返回值: 如果函數(shù)執(zhí)行成功,返回值為實際寫入的數(shù)據(jù)項的個數(shù); 如果出錯, 則返回值小于實際寫入數(shù)據(jù) 項的個數(shù)count 。例如:已知struct student stu20;Fwrite(&stu1,sizeof(struct student),

15、2,fp); 數(shù)據(jù)塊讀寫函數(shù):2、讀數(shù)據(jù)塊函數(shù)一般調用形式為:fread(buffer , size , count , fp); 函數(shù)返回值: 如果函數(shù)執(zhí)行成功,返回值為實際寫入的數(shù)據(jù)項的個數(shù); 如果出錯, 則返回值小于實際寫入數(shù)據(jù) 項的個數(shù)count 。例如:已知struct student stu20,fread(&stu1,sizeof(struct student),2,fp); eg10.6:從鍵盤輸入兩個學生數(shù)據(jù)(包括姓名、學號、年齡、家庭地址),寫入一個文件t1.txt中,再讀出這兩個學生的數(shù)據(jù)顯示在屏幕上。 #include main( )struct stu FILE *f

16、p; char name20; char ch; int num; int i; int age; pp=boya; char addr30; qq=boyb;boya2,boyb2,*pp,*qq;程序如下:if(fp=fopen(t1.txt,wb+)=NULL) printf(Cannot open the file!); exit(0); printf(n input datan);for(i=0;iname,&pp-num, &pp-age,pp-addr);接上頁程序fclose(fp);pp=boya;fwrite(pp,sizeof(struct stu),2,fp);fclo

17、se(fp); fpfopen( t1.txt,wb+ );fread(qq,sizeof(struct stu),2,fp);printf(nnamettnumber age addrn);for(i=0;iname, qq-num,qq-age,qq-addr);接上頁程序運行結果:格式化讀寫函數(shù):1、格式化寫函數(shù)一般調用形式為:fprintf(文件指針,格式字符串,輸入表列 )如: fprintf(fp,“i=%d,t=%f”,i,t); 格式化讀寫函數(shù):2、格式化讀函數(shù)一般調用形式為:fscanf(文件指針,格式字符串,輸入表列 )如: fscanf(fp,“%d%f”,&i,&t);

18、 位置指針復位函數(shù):一般調用形式為: rewind(文件指針);不帶返回值隨機讀寫函數(shù):一般調用形式為: fseek(文件指針,位移量,起始點); “位移量” :是一個帶符號長整數(shù),表示文件位置 指針的位移量,正值表示向文件結尾方 向移動,負值表示向文件頭方向移動。 當用常量表示位移量時,要求加后綴“L”。 “起始點” :表示從何處開始計算位移量。規(guī)定的起始點有三種: 文件首,當前位置和文件尾。起始點的表示方法如下表:起始點文件首當前位置文件末尾表示符號SEEK_SETSEEK_CURSEEK_END數(shù)字表示012例如: fseek(fp,100L,0); 函數(shù)的返回值:如果文件定位成功,則返回0值;如果文件定位不成功,則返回一個非0值。 返回文件當前位置的函數(shù):一般調用形式為: ftell(文件指針);例如: long i; if(i=ftell(fp)=-1L) printf (“a file error %ld.n,i); 返回值: 一個長整型數(shù),表示相對文件頭的字節(jié)數(shù),出錯時返回-1L。 ferror()一般調用形式為: ferror( 文件指針 );

溫馨提示

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

評論

0/150

提交評論