版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、文件(wnjin)的分類:ASCII 碼文件(文本文件):文件的每一個字節(jié)(z ji)放 一個ASCII代碼,代表一個字符。 二進制文件 :把內存中的數據按其在內存中的存 儲形式原樣(yun yn)輸出到文件上。 根據數據在內存的組織形式不同可分為兩類文件 ASCII 碼文件(文本文件) 二進制文件 根據數據讀寫方式不同可分為兩類文件 順序存取文件 隨機存取文件 第1頁/共29頁第一頁,共30頁。三、文件(wnjin)的基本操作 打開打開(d ki)文件文件 把文件名等目錄信息從磁盤上把文件名等目錄信息從磁盤上讀讀 入內存并存入結構體。入內存并存入結構體。 關閉文件關閉文件 把內存把內存(ni
2、 cn)結構體中的文件名結構體中的文件名等目錄等目錄 信息寫入磁盤。信息寫入磁盤。(3) 寫文件寫文件 向文件寫內容。向文件寫內容。 (4) 讀文件讀文件 從文件讀內容。從文件讀內容。 四、 文件的輸入輸出方式 C語言對文件進行處理分為: 非緩沖文件系統(tǒng) 緩沖文件系統(tǒng)第2頁/共29頁第二頁,共30頁。非緩沖文件系統(tǒng) 程序與外設直接(zhji)進行數據交換。 特點(tdin) 每讀寫一次都要啟動外設。 緩沖文件系統(tǒng) 程序與外設通過內存(ni cn)緩沖區(qū)進行 數據交換。(常用的方式) 特點 只有內存緩沖區(qū)滿(寫盤)或空(讀盤)才 啟動外設。 程序數據區(qū)輸出文件緩沖區(qū)輸入文件緩沖區(qū)磁盤第3頁/共2
3、9頁第三頁,共30頁。1. 文件類型(FILE) 每個被使用的文件都在內存中開辟一個區(qū),用來存放(cnfng)文件的有關信息(如文件名,狀態(tài),當前位置等)。這些信息保存在一個結構體類型的變量中。結構體類型由系統(tǒng)定義為“FILE”。 有的C版本在 stdio.h文件中有如下定義:typedef struct int _fd;; /* 文件號 */ int _cleft; /* 緩沖區(qū)中剩下的字符 */ int _mode; /* 文件操作模式(msh) */ char *_nexttc; /* 下一個字符位置 */ char *_buff; /* 文件緩沖區(qū)位置 */ FILE;13.1. 文件
4、(wnjin)指針第4頁/共29頁第四頁,共30頁。2. 定義FILE類型指針(zhzhn)變量 FILE 類型(lixng)的指針變量定義方法 FILE *指針(zhzhn)變量名;例如:FILE *fp;含義:fp是一個指向FILE類型結構體的指針變量。 可以使可以使fpfp指向某個文件的結構體變指向某個文件的結構體變量,從而通過該結構體變量中的文件信量,從而通過該結構體變量中的文件信息能夠訪問該文件。息能夠訪問該文件。 第5頁/共29頁第五頁,共30頁。13.2 13.2 文件(wnjin)(wnjin)的打開與關閉 13.2.1 文件(wnjin)的打開函數(fopen函數) (1)
5、(1) 調用(dioyng)(dioyng)方式: FILE *fp ;fp= fopen(文件名,文件的使用方式);所要打開的文件名。所要打開的文件名。必須是用雙引號引起的字符串常量。 具有特定含意的符號具有特定含意的符號也必須由雙引號引起用戶定義的文件類型指針變量功能:以指定的方式打開指定的文件,若操作 成功,則返回一個指向該文件的指針,若打 開文件時出現錯誤,則返回空指針NULL。 例 FILE *fp; fp=fopen(stu.dat,r);第6頁/共29頁第六頁,共30頁。文件使用(shyng)方式 基本方式字符(z f)(單獨使用是對文本文件): r 僅為讀而打開。僅為讀而打開。
6、 ( (只讀文件只讀文件) ) w 僅為寫而打開。僅為寫而打開。 ( (建立新文件建立新文件) ) a 僅為添加而打開。僅為添加而打開。( (寫舊文件寫舊文件) ) 按二進制格式(g shi)讀寫文件(基本方式字符+“b”) b 輔助說明,按二進制格式讀寫文件。輔助說明,按二進制格式讀寫文件。 同時進行讀寫文件(基本方式字符+“b”+“+”) + 輔助說明,可同時進行讀和寫文件。輔助說明,可同時進行讀和寫文件。 例如:fp=(“stu.dat”,“rb”);例如:fp=(“stu.dat”,“r+”);第7頁/共29頁第七頁,共30頁。例:#include main() FILE *fp; i
7、f(fp=fopen(stu.dat,r) =NULL) printf(file not found.); exit(0); else printf(file opened ok!); fclose(fp); 程序運行結果: 如果磁盤上存在文件stu.dat,屏幕(pngm)上會顯示file open ok!,否則屏幕(pngm)上顯示file not found.。常使用此方法打開(d ki)一個文件exit函數的功能是關閉所有文件,終止程序運行。exit(0)為正常(zhngchng)終止程序第8頁/共29頁第八頁,共30頁。13.2.2 文件的關閉(gunb)函數(fclose函數) (
8、1) 調用(dioyng)方式: fclose(文件(wnjin)指針); 功能:關閉由文件指針指定的文件,把緩沖區(qū) 中的數據(未裝滿緩沖區(qū)的數據)輸出 到磁盤上,釋放文件指針。例如: FILE *fp; fp=fopen(“output.dat”,“r+”); /* 進行讀寫操作 */ fclose(fp);注意:fopen函數和fclose函數總是成對出現的。 無fclose函數時會導致部分數據丟失!第9頁/共29頁第九頁,共30頁。13.3 13.3 文件(wnjin)(wnjin)的讀寫 13.3.1 單個字符操作(cozu)的讀寫函數 這兩個函數是以字符為單位(dnwi)進行文件讀寫
9、的函數。1. fputc1. fputc函數函數一般調用形式: fputc(fputc(字符常量或變量字符常量或變量, ,文件指針文件指針); ); 功能:把指定字符存入文件指針所指的文件中。 如果輸出失敗,則返回一個EOF(-1)。例如:fputc(ch,fp); (其中ch為字符變量,fp為文件指針) 含義:將ch的值輸出到fp所指向的文件中去。(EOF是在stdio.h文件中定義的符號常量,值為-1)第10頁/共29頁第十頁,共30頁。2. fgetc2. fgetc函數函數(hnsh)(hnsh)一般(ybn)調用形式: 字符字符(z f)(z f)變量變量=fgetc(=fgetc(
10、文文件指針件指針); ); 功能:從文件指針所指文件中讀一個字符賦給指 定的字符變量。當遇文件結束符,返回一 個文件結束標志EOF(-1)。例如:ch=fgetc(fp); 其中ch為字符變量,fp為文件指針。 含義:從fp所指向的文件中讀入一個字符賦 給字符變量ch。第11頁/共29頁第十一頁,共30頁。例: 閱讀程序。 #include stdio.h #define NULL 0 main() FILE *fp; int count=0; char c; if(fp=fopen(“file.txt”,“r”)=NULL) printf(“Cant Open File n”); exit(
11、0); c=fgetc(fp); while(c!=EOF) count+; c=fgetc(fp); printf(“count=%dn”,count); fclose(fp); 若文件(wnjin)file.txt的內容是: abcd1234ABCD輸出(shch)結果:12這是讀一個文本文件(wnjin)中字符,并判斷文件(wnjin)是否結束的常用方法第12頁/共29頁第十二頁,共30頁。13.3.2 字符串的讀寫函數(hnsh)這兩個函數是以字符串為單位(dnwi)進行文件讀寫的函數。一般(ybn)調用形式: fputs(fputs(字符串字符串, ,文件指針文件指針);); 1.
12、fputs函數功能:向指定文件輸出一個字符串。例如:fputs(str,fp); (其中str是字符數組名)含義:向fp 所指向的文件中輸出str中的字符串。2. fgets函數fgets(fgets(字符串字符串, ,字符串長度字符串長度, ,文件指針文件指針);); 功能:從指定文件中讀入一個字符串。 例如:fgets(str,n,fp); (其中str是字符數組名)含義:從fp指向的文件讀取長度為n-1的字符串, 最后加一個0存入字符數組str中。調用形式: 第13頁/共29頁第十三頁,共30頁。13.3.3 數據(shj)塊的讀寫函數一般(ybn)調用形式: fread(buffer,
13、size,count,fp); fwrite(buffer,size,count,fp); 其中(qzhng):buffer:是一個指針。(是起始地址)。 對fread來說,它是讀入數據的存放地址。 對fwrite來說,它是輸出數據的地址。size :要讀寫的字節(jié)數。 count:要進行讀寫多少個size字節(jié)的數據項。 功能:對fp所指的文件讀寫buffer所指的size*count 個字節(jié)數據。 例如:fread(f,4,2,fp); (其中f是實型數組名)第14頁/共29頁第十四頁,共30頁。例1 把數組a寫入文件(wnjin)fa;再從fa讀入數組b。 #include stdio.h
14、main() FILE* fp; int a100=1,5,6,78,21,34,67,87,23,b100, i ; fp=fopen(tmp,wb); fwrite(a,sizeof(a),1,fp); /* fwrite(a,sizeof(int),100,fp);*/ fclose(fp); fp=fopen(tmp,rb); fread(b,sizeof(a),1,fp); for(puts(),i=0;i10;i+)printf(%6d,bi); fclose(fp);第15頁/共29頁第十五頁,共30頁。13.3.4 格式化讀寫函數(hnsh)這兩個函數是進行格式(g shi)讀
15、寫文件的函數 。一般調用(dioyng)形式: fprintf(文件指針,格式字符串,輸出表列); fscanf(文件指針,格式字符串,輸入表列) ; 例如:fprintf(fp,“%d,%6.2f”,i,x);功能:按指定格式將數據寫到指定文件中。 或從指定文件按格式輸入數據。又如:fscanf(fp,“%d,%f”,&i,&x);第16頁/共29頁第十六頁,共30頁。13.4 13.4 文件的定位(dngwi)(dngwi)與出錯檢測 1. rewind函數(hnsh)一般調用(dioyng)形式: rewind(rewind(文件指針文件指針);); 功能:使位置指針重新返回文件的開頭。
16、2. fseek函數 一般調用形式: fseek(fseek(文件指針文件指針,位移量,起始點) ); 起始點:用0、1、2或其對應的名字SEEK_SET、 SEEK_CUR、SEEK_END代替,分別表 示文件開始、文件當前位置、文件末尾。 位移量:指以起始點為基點,向前(-)或向后移動的 字節(jié)數。ANSI C標準規(guī)定在數字末尾加一個 字母L,表示long型。 第17頁/共29頁第十七頁,共30頁。功能:把文件的讀寫位置指針(zhzhn)移到指定的位置。 例如(lr):fseek(fp,128L,SEEK_SET); 將位置指針移到離文件頭128個字節(jié)處。例如:fseek(fp,-10L,2
17、); 將位置指針從文件末尾處向后退(hutu)10個字節(jié)。注意:fseek函數一般用于二進制文件。 3. ftell函數 一般調用形式: ftell(ftell(文件指針文件指針);); 功能:返回文件位置指針的當前值。例如:pos=ftell(fp); 獲取fp指向文件的當前讀寫位置,并將其值 賦給變量pos 。 第18頁/共29頁第十八頁,共30頁。 . ferror()函數 ferror()函數用來確定文件操作系統(tǒng)中是否出錯。其函數原型為: int ferror(FILE *fp); 如果ferror()函數返回值為0,則表示此前的文件操作成功;否則,若返回一個非0值,則表示最近一次文件
18、操作出錯。由于對文件的每次I/O操作都會形成新的出錯碼,所以在每次文件操作后應立即調用ferror()函數查看此次操作是否成功,否則會丟失信息。 表示上述功能常用(chn yn)的語句的是: if(ferror(fp) printf(file can not I/On); fclose(fp); exit(0); 第19頁/共29頁第十九頁,共30頁。5. clearer()函數 clearer()函數的函數原型(yunxng)為: void clearer(FILE *fp); 功能是清除文件結束標志和文件出錯標志(設置為0)。本函數沒有返回值。6exit函數 當文件出現錯誤時,為了避免數據
19、丟失,正常(zhngchng)返回操作系統(tǒng),可以調用過程控制函數exit關閉文件,終止程序的執(zhí)行。一般形式為:exit(status);第20頁/共29頁第二十頁,共30頁。13.5 13.5 文件(wnjin)(wnjin)綜合實例 編寫一個程序,從data.datdata.dat文本文件中讀出一個字符,將其加密后寫入data1.datdata1.dat文件中,加密方式是字符的ASCIIASCII碼加1 1。 分析:先打開data.datdata.dat文本文件并建立data1.datdata1.dat文件,從前者讀出一個字符c c,將(c+1)%256(c+1)%256這個(zh ge)A
20、SCII(zh ge)ASCII碼對應的字符寫入后者中。直到讀完為止。 第21頁/共29頁第二十一頁,共30頁。#includevoid main()FILE *fp,*fp2; char c; if(fp=fopen(data.dat,r)=NULL) printf(不能打開文件(wnjin)n); return; if(fp1=fopen(data1.dat),w)=NULL) printf(不能建立文件(wnjin)n); return; while(!feof(fp) c=fgetc(fp); c=(c+1)%256; fputc(c,fp1); fclose(fp); fclose(
21、fp); 第22頁/共29頁第二十二頁,共30頁。 編寫程序,創(chuàng)建數據文件goods.dat用于存儲商品信息。已知每一個(y )商品 包括:名稱,單價,進貨量,和庫存4項數據。按指定的格式讀寫.第23頁/共29頁第二十三頁,共30頁。#includemain()int count ,amount,stock;float price;char name20;FILE *fp;if(fp=fopen(“goods.dat”,”wb”)= =NULL)printf(“can not open file.n”);exit(0);第24頁/共29頁第二十四頁,共30頁。for(count=0; ;cou
22、nt+)fprintf(“%d”,count+1);scanf(“%s%d%d”,name,&price,&amount,&stock);if(price=0)break; printf(fp,”%sn%.2f,%d,%d”,name,price,amount,stock);第25頁/共29頁第二十五頁,共30頁。fclose(fp);fp=fopen(“goods.dat”,”rb”);printf(“overstock goods is:n”);while(!feof(fp)fscanf(fp,”%s%f,%d,%d”,name,&price,&amount,&stock);if(stoc
23、k=amount/2);printf(“%s,%.2f,%d,%dn”,name,price,amount,stock);fclose(fp);第26頁/共29頁第二十六頁,共30頁。13.6 13.6 小 結(1)(1)文件是指存儲在外部介質上的數據集合。 (2)(2)對文件的操作(cozu)(cozu)包括文件的打開、關閉、讀、寫、文件的定位和出錯的檢驗等?,F在分別介紹如下:在C C語言中使用fopen()fopen()函數完成對文件的打開操作(cozu)(cozu)。其一般調用方式為:fopen(fopen(文件名,操作(cozu)(cozu)方式););關閉文件用函數fclose()f
24、close()函數來實現,其調用的形式為:fclose(fp);fclose(fp);文件的讀函數包括fgetc()fgetc()函數、fgets()fgets()函數、fread()fread()函數和fscanf()fscanf()函數。 fgetc() fgetc()函數的功能是從指定的文件中讀入一個字符。 fgets() fgets()函數的功能是從文件指針所指向的文件中,讀入一個字符串。 fscanf() fscanf()函數為格式化輸入函數,其功能是從指定的文件中讀取指定格式的數據。 fread() fread()函數的功能是從指定文件中讀入一組數據。有關寫操作(cozu)(cozu)的函數主要有fputc()fputc()函數、fputs()fputs()函數、fwrite()fwrite()函數和fprintf()fprintf()函數。第27頁/共29頁第二十七頁,共30頁。 fputs() fputs()函數,功能是將字符串寫入文件指針所指的文件中。fputs()fputs()函數帶返回值。如輸出成功,返回值為0 0,否則返回文件結束標志EOFEOF其值為-1-1。 fprintf() fprintf()函數為
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高端會議策劃與銷售服務合同模板
- 2025年度某局數字化轉型勞務分包結算規(guī)范合同2篇
- 2025版辦公樓小型裝飾裝修工程施工合同示范6篇
- 2025版建筑工地挖掘機駕駛員勞動合同標準范本3篇
- 《全球化與兩岸關系》課件
- 可燃冰資源地質評價方法與實踐考核試卷
- 2025版學校食堂蔬菜采購及食品安全追溯服務合同3篇
- 2025年度美術品藝術品投資顧問合同范本4篇
- 2025年學校節(jié)日慶祝協(xié)議
- 2025年合伙人員協(xié)議
- 2024-2025學年人教版數學六年級上冊 期末綜合試卷(含答案)
- 收養(yǎng)能力評分表
- 山東省桓臺第一中學2024-2025學年高一上學期期中考試物理試卷(拓展部)(無答案)
- 中華人民共和國保守國家秘密法實施條例培訓課件
- 管道坡口技術培訓
- 2024年全國統(tǒng)一高考英語試卷(新課標Ⅰ卷)含答案
- 2024年認證行業(yè)法律法規(guī)及認證基礎知識 CCAA年度確認 試題與答案
- 皮膚儲存新技術及臨床應用
- 外研版七年級英語上冊《閱讀理解》專項練習題(含答案)
- 2024年遼寧石化職業(yè)技術學院單招職業(yè)適應性測試題庫必考題
- 上海市復旦大學附中2024屆高考沖刺模擬數學試題含解析
評論
0/150
提交評論