C語言程序設計 課件 (張惠濤 ) 西電 第8章 文件_第1頁
C語言程序設計 課件 (張惠濤 ) 西電 第8章 文件_第2頁
C語言程序設計 課件 (張惠濤 ) 西電 第8章 文件_第3頁
C語言程序設計 課件 (張惠濤 ) 西電 第8章 文件_第4頁
C語言程序設計 課件 (張惠濤 ) 西電 第8章 文件_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第八章文件文件68.1文件基本概念及分類8.2文件類型指針8.3文件的打開與關閉8.4文件的讀寫8.5文件的定位8.6C語言學習之路8.7本章小結8.1文件基本概念及分類文件在計算機領域是一個重要的概念,它其實是指存儲在計算機外存上的一組相關數據的有序集合。數據集合的名稱就叫文件名,在系統當中是唯一的,是其本身的操作標志。前面的各章中涉及到的源程序文件、目標文件、可執行文件、庫文件等等都可以叫作文件。C語言提供了強大的機制支持文件的各類操作。本章重點圍繞ASCII碼文件和二進制碼文件進行學習。ASCII文件也叫文本文件,它在磁盤中存放時每個字節存儲一個ASCII表示的字符。文本文件是可以直接閱讀的,可使用記事本打開,其擴展名為.txt。二進制文件是按內存中的二進制的存儲形式原樣輸出到磁盤上來保存,因此這類文件一般不能使用記事本直接打開來閱讀其中內容。C系統在處理文件時,就把文件看成是字節流或二進制流,按字節進行處理。本章將重點講解ANSIC規定文件系統及其標準輸入輸出函數。8.2文件類型指針所謂文件指針,實際上是指向結構體類型的指針變量,這個結構體中包含文件的信息,如緩沖區的地址,在緩沖區中當前存取的字符的位置,對文件是“讀”還是“寫”,是否出錯,是否已經遇到文件結束標志等信息。此結構體類型名為FILE,可以由此類型來定義文件指針。定義文件類型指針變量的一般形式為: FILE*指針變量標識符;例如: FILE*fp;fp被定義為指向文件類型的指針變量,稱為文件指針。文件指針用于指向多個文件,實際上是用于存放文件緩沖區的地址。在緩沖文件系統中可以進行文件的打開、關閉、讀、寫、定位等操作。結構類型名“FILE”必須大寫。一般情況下對文件操作有3個步驟:打開文件,即在計算機內存中開辟緩沖區,用于存放被打開文件的相關信息;文件處理,包括讀寫、定位等操作;關閉文件,將緩沖區中的內容寫回到磁盤,然后釋放緩沖區。8.3文件的打開與關閉8.3.1文件打開函數fopen()fopen()函數用來打開一個文件,其調用的一般形式為:

文件指針名=fopen(文件名,打開文件方式)其中,“文件指針名”必須是被說明為FILE類型的指針變量;“文件名”是被打開文件的文件名,

以字符串常量或字符串數組的形式出現;“打開文件方式”是指文件的類型和操作要求。例如: FILE*fp; fp=("C:\\myfile.txt","wt");其意義是在C盤根目錄下只寫打開或建立一個文本文件myfile,只允許寫數據操作,并使文件指針fp指向該文件。文件名字符串中兩個反斜線“\\”中的第一個表示轉義字符,第二個表示根目錄。8.3文件的打開與關閉8.3.1文件打開函數fopen()打開文件的方式有12種,如下表所示打開方式文件類型含義“r”文本文件只讀打開一個文本文件,只允許讀數據“w”文本文件只寫打開或建立一個文本文件,只允許寫數據“a”文本文件追加打開一個文本文件,并在文件末尾寫數據“r+”文本文件讀寫打開一個文本文件,允許讀和寫“w+”文本文件讀寫打開或建立一個文本文件,允許讀寫“a+”文本文件讀寫打開一個文本文件,允許讀,或在文件末追加數據“rb”二進制文件只讀打開一個二進制文件,只允許讀數據“wb”二進制文件只寫打開或建立一個二進制文件,只允許寫數據“ab”二進制文件追加打開一個二進制文件,并在文件末尾寫數據“rb+”二進制文件讀寫打開一個二進制文件,允許讀和寫“wb+”二進制文件讀寫打開或建立一個二進制文件,允許讀和寫“ab+”二進制文件讀寫打開一個二進制文件,允許讀,或在文件末追加數據8.3文件的打開與關閉8.3.2文件關閉函數fclose()文件一旦使用完畢,要用關閉文件函數fclose()把文件關閉,以避免文件的數據丟失等情況發生。fclose()函數調用的一般形式是: fclose(文件指針);例如: fclose(fp);正常完成關閉文件操作時,fclose()函數返回值為0;返回非零值表示有錯誤發生。8.3文件的打開與關閉例8.1演示打開和關閉文本文件#include"stdio.h"#include"stdlib.h"intmain(){FILE*fp;if((fp=fopen("c:\\myfile.txt","wt"))==NULL){printf("打開文件失敗\n");exit(0);}printf("打開文件成功!");//此處可替換為對文件的讀寫操作語句

if(fclose(fp)==0)printf("\n成功關閉文件!\n");elseprintf("\n未成功關閉文件!\n");system("pause");return0;}本程序演示了文件打開和關閉的過程。如果文件未成功打開,則打印“不能打開文件”,否則打印“文件被成功打開!”;如果文件成功關閉,則打印“成功關閉文件!”。正常情況下,該程序會在C盤根目錄下以讀寫的方式建立myfile.txt文件,然后再把它關閉。8.4文件的讀寫8.4.1字符讀寫函數:fgetc()和fputc()1、fputc()功能是將多個字符寫到文件中,一般形式為:fputc(字符數據,文件指針);例如:charc=‘a’;fput(c,fp);//其中fp是已經正確打開的可寫文件的指針該語句將變量c的值寫入fp所指向的文件中。2、fgetc()功能是從文件中讀取多個字符,一般形式為:fgetc(文件指針);例如:charch;ch=fgetc(fp);表示從文件fp中讀取多個字符,賦給變量ch,而fp的位置指針向前移動到下一個字符。8.4文件的讀寫8.4.1字符讀寫函數:fgetc()和fputc()例8.2演示向打開的文本文件中寫入或讀取一個字符#include"stdio.h"#include"stdlib.h"intmain(){FILE*fp;charch='a';charch1='b';//ch1初始值設置為’b’if((fp=fopen("c:\\myfile.txt","w+"))==NULL){printf("打開文件失敗!\n");exit(0);}

printf("打開文件成功!\n");fputc(ch,fp);rewind(fp);//將文件指針重新指向文件開頭

printf("ch1初始值為:%c\n",ch1);ch1=fgetc(fp);printf("ch1現在的值為:%c\n",ch1);

if(fclose(fp)==0)printf("關閉文件成功!\n");elseprintf("關閉文件失敗!\n");system("pause");return0;}8.4文件的讀寫8.4.2字符串讀寫函數:fgets()和fputs()1、fputs()功能是向指定文件輸出字符串,一般形式為:fputs(字符串,文件指針);2、fgets()功能是從文件中讀字符串,一般形式為:fgets(字符串起始地址,字符數量,文件指針);例8.3演示向打開的文本文件中寫入或讀取字符串#include"stdio.h"#include"stdlib.h"intmain(){FILE*fp;charch[]=”helloworld”;charch1[30]=”abcdefg”;if((fp=fopen("c:\\myfile.txt","w+"))==NULL){printf("打開文件失敗!\n");exit(0);

}printf("打開文件成功!\n");fputs(ch,fp);rewind(fp);//將文件指針重新指向文件開頭printf("ch1初始值為:%s\n",ch1);fgets(ch1,4,fp);//從文件中取4-1=3個字符,留一個字節存放’\0’printf("ch1現在的值為:%s\n",ch1);

if(fclose(fp)==0)printf("關閉文件成功!\n");elseprintf("關閉文件失敗!\n");system("pause");return0;}8.4文件的讀寫8.4.3數據塊讀寫函數:freed()和fwrite()1、fread()函數的功能是從文件中讀取數據塊,一般形式為: fread(buffer,size,count,fp);關于fread()的幾點說明:(1)fp是文件指針;buffer是一個指針,用來存放輸出數據塊的地址;size表示數據塊的字節數;count表示要讀取的數據塊塊數;(2)fread()函數的功能是從fp所指向文件的當前位置開始,一次讀取size個字節,重復count次,并將讀取的數據存放到從buffer開始的內存中;同時,將位置指針向前移動size*count個字節;(3)如果調用fread()函數成功,則函數返回值等于count。2、fwrite函數的功能是向文件寫數據塊,其調用的一般形式為: fwrite(buffer,size,count,fp);關于fwrite()的幾點說明:(1)fp是文件指針;buffer是一個指針,用來存放將要讀取數據塊的地址;size表示一個數據塊的字節數;count表示要寫的數據塊個數;(2)fwrite()函數功能是從buffer指定的地址開始,一次輸出size個字節,重復count次,并將輸出的數據存放到fp所指向的文件中;同時,將位置指針向前移動size*count個字節。(3)如果調用fwrite函數成功,則函數返回值等于count。8.4文件的讀寫8.4.3數據塊讀寫函數:freed()和fwrite()例8.4演示向打開的文本文件中寫入或讀取若干數據塊#include"stdio.h"#include"stdlib.h"intmain(){FILE*fp;charch[]="Helloeveryone,howareyou?";charch1[30]="1234567890";if((fp=fopen("c:\\myfile.txt","w+"))==NULL){printf("打開文件失敗!\n");exit(0);}

printf("打開文件成功!\n");fwrite(ch,5,3,fp);//從ch字符串中取3*5=15個字符的

//數據存入fp中rewind(fp);//將文件指針重新指向文件開頭printf("ch1初始值為:%s\n",ch1);

fread(ch1,4,2,fp);//從fp中取2*4=8個字符的

//數據存入ch1字符數組中printf("ch1現在的值為:%s\n",ch1);

if(fclose(fp)==0)printf("關閉文件成功!\n");elseprintf("關閉文件失敗!\n");system("pause");return0;}8.4文件的讀寫8.4.4格式化讀寫函數:fscanf()和fprinf()1、fprintf()函數只能向文本文件中輸出數據。fprintf()函數和printf()函數相似,只是輸出的內容將按指定格式存放到磁盤的文本文件中,而不是屏幕上。fprintf()函數的調用形式如下: fprintf(文件指針,格式控制字符串,輸出項表);//參考printf()函數 fprintf(fp,"%d%d",x,y);//fp為以寫入的方式正確打開的文件指針2、fscanf()函數只能從文本文件中按格式輸出。fscanf()函數和scanf()函數相似,其輸出的對象是磁盤上文本文件中的數據,而不是鍵盤的輸入數據。fscanf()函數的調用形式如下: fscanf(文件指針,格式控制字符串,輸出項表);//參考scanf()函數 fscanf(fp,"%d%d",&a,&b);

8.4文件的讀寫8.4.4格式化讀寫函數:fscanf()和fprinf()例8.5演示按指定格式向打開的文本文件中寫入或讀取一個字符#include"stdio.h"#include"stdlib.h"intmain(){FILE*fp;charch=’x’;charch1=’a’;if((fp=fopen("c:\\myfile.txt","w+"))==NULL){printf("打開文件失敗!\n");exit(0);}printf("打開文件成功!\n");fprintf(fp,”%c”,ch);//向打開的文件中輸出ch中的值’x’rewind(fp);//將文件指針重新指向文件開頭printf("ch1初始值為:%c\n",ch1);fscanf(fp,”%c”,&ch1);//從打開的文件中輸入一個字符,保存到ch1中

//與scanf()用法一樣,參數要使用&表示地址printf("ch1現在的值為:%c\n",ch1);if(fclose(fp)==0)printf("關閉文件成功!\n");elseprintf("關閉文件失敗!\n");system("pause");return0;}8.5文件的定位8.5.1rewind()函數rewind函數的調用形式為: rewind(fp);該函數的作用是將文件指針返回文件開頭位置8.5文件的定位8.5.2fseek()函數函數fseek()是文件定位函數,其一般調用形式為: fseek(文件類型指針,位置字節數,起始位置)起始位置有0,1,2三個參數可以選擇:0代表文件開始位置;1代表當前位置;2代表文件末尾。注意:該函數多用于二進制文件,但也可以用于文本文件,不過要精確的控制位置量,不然由于文本文件要進行字符轉換,會發生一定的錯誤。8.5文件的定位例8.6演示fseek()函數進行文件定位#include"stdio.h"#include"stdlib.h"intmain(){FILE*fp; inti;charch;if((fp=fopen("c:\\myfile.txt","w+"))==NULL){printf("打開文件失敗\n");exit(0);}printf("打開文件成功\n"); //以下for循環用于向打開的文件中輸入26個小寫字母 for(i=0;i<26;i++) { ch=i+97; fputc(ch,fp); } fseek(fp,1,0);//以文件開頭為起點,將fp向后移動一個字節位置

ch=fgetc(fp);//獲得該位置的一個字符并賦值給ch printf("%c\n",ch); //打印ch存儲的字符if(fclose(fp)==0)printf("關閉文件成功!\n");elseprintf("關閉文件失敗!\n");

溫馨提示

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

評論

0/150

提交評論