C語言程序設計教程課件 第10章-文件操作_第1頁
C語言程序設計教程課件 第10章-文件操作_第2頁
C語言程序設計教程課件 第10章-文件操作_第3頁
C語言程序設計教程課件 第10章-文件操作_第4頁
C語言程序設計教程課件 第10章-文件操作_第5頁
已閱讀5頁,還剩18頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

第10章文件本章主要內容1.能夠建立新文件和更新文件內容2.能夠從順序文件中讀取數據3.了解對文件進行操作的步驟4.熟悉對順序文件進行操作的方式5.了解對隨機文件進行操作的方式6.了解對文件的低級讀寫操作第10章文件操作10.1文件的概念

文件就是記載在外部存儲器上的數據的集合。

C語言把這些數據的集合看成是字符(或字節)序列。

(或者說C語言是把每一個文件都看作是一個有序的字節流)計算機可處理的文件:源程序,圖形文件、音頻文件、數據文件等等。按數據的組織形式可分為:文本文件、二進制文件

C語言可以對文本文件和二進制文件進行讀寫操作。

流——是文件和程序之間通訊的通道

程序可以創建文件和對文件內容進行更新、修改。

程序中所需的數據也可以從另一個文件中獲得。10.2文件的操作

對文件的操作方式1.緩沖文件系統(或稱為標準I/O)2.非緩沖文件系統(或稱為系統I/O)

緩沖文件系統會自動地在內存中開辟一個文件緩沖區,

對文件進行處理時,通過文件緩沖區進行輸入/輸出操作。

非緩沖文件系統不設置緩沖區,由程序設置緩沖區的大小。10.2文件的操作10.2.1文件的打開與關閉

文件指針:用于對文件進行操作。

文件指針的類型為結構類型,已由系統定義。

類型名為FILE(在頭文件stdio.h中),定義形式如下:typedefstruct{short level; /*fillemptylevelofbuffer*/unsigned flags; /*Filestatusflags*/char fd /*Filedescriptor*/unsignedchar hold; /*ungetccharifnobuffer*/short bsize; /*Buffersizeunsignedchar *buffer; /*Datatransferbuffer*/unsignedchar *curp; /*Currentactivepointer*/unsigned istemp; /*Temporaryfileindicator*/short token; /*Usedforvaliditychecking*/}FILE;

/*ThisistheFILEobject*/10.2文件的操作10.2.1文件的打開與關閉

文件操作之前必須要先定義文件指針變量。

定義形式:FILE*<變量標識符>;如:FILE*fp;

則:fp為指向FILE類型結構體的指針變量。

文件操作步驟:打開文件——對文件進行讀/寫操作——關閉文件

文件打開函數原型FILE*fopen(char*filename,char*type);

(注:filename代表的是一個文件名,該字符串是一個合法的帶有路徑的文件名;type字符串代表的是對文件的操作模式,不同的模式對應不同的操作。)

常用的文本文件打開模式有6種:r

以只讀方式打開一個文本文件w

以只寫方式打開一個文本文件a

以追加方式打開一個文本文件r+

以讀/寫方式打開一個文本文件w+

以讀/寫方式建立一個新的文本文件a+

以讀/寫方式打開一個文本文件常用的文件的操作模式:rb

以只讀方式打開一個二進制文件wb

以只寫方式打開一個二進制文件ab

以追加方式打開一個二進制文件rb+

以讀/寫方式打開一個二進制文件wb+

以讀/寫方式建立一個新的二進制文件ab+

以讀/寫方式打開一個二進制文件

注:并不是所有的C語言系統都具備這些文件操作模式,與編譯器有關。10.2文件的操作10.2文件的操作如有:FILE*fp;fp=fopen(“文件名”,“打開模式”);作用:打開由“文件名”指定的文件,

以指定的“打開模式”對文件進行訪問。若正確,則返回一個指向該文件的指針。若錯誤,則返回錯誤標志NULL。

當fp指向某一具體的文件后,可通過該文件變量的成員信息訪問文件的其它屬性。例1:閱讀【例10-1】的程序,了解文件正確的打開方式。思考和分析程序中存在的問題。

C語言規定:fopen()函數中的“文件名”可以在當前工作目錄(相對路徑)下;也可以在指定路徑(絕對路徑)下。如:fopen(“myfile.c","r");fopen("c:\\DOS\\config.sys","r");1.文件“test.txt”所在位置如何?2.在程序結束之前并沒有關閉被打開的文件,文件會不會遭到破壞?3.文件test.txt的內容是什么?10.2文件的操作分析10.2文件的操作10.2.2文件操作的錯誤檢測

文件操作的錯誤檢測體現在兩個地方:1.對文件的打開狀態進行正確性判斷;2.對文件進行讀寫操作進行正確性判斷。

C語言提供了兩個文件檢測函數1.判斷文件流上是否有錯intferror(FILE*stream);

若正確,返回值為0,若發生錯誤,返回值為非零值。2.判斷是否到達文件尾intfeof(FIEL*stream);

若stream所指向的文件到達文件尾,則返回值為非零值;

否則,返回值為0。10.2文件的操作10.2.3文件的順序讀寫

順序讀寫是指文件被打開后,按照數據流的先后順序對文件進行讀/寫操作。

每讀/寫一次后,文件指針自動指向下一個讀/寫位置。

通過調用系統函數實現對文件的讀/寫操作,系統函數的聲明stdio.h中。

常用的順序讀寫函數(一)從文件讀一個字符:fgetc(FILE*stream);若正確:返回字符ch若錯誤或到達文件尾:返回EOF2.向文件寫一個字符:charfputc(charch,FILE*stream);若正確:返回一個非負數若錯誤:返回EOF10.2文件的操作例2:閱讀和分析【例10-2】

編寫一個程序,將當前目錄下的文本文件輸出到屏幕上。上機驗證程序的功能。例3:閱讀和分析【例10-3】

編寫一個程序,把從鍵盤輸入的內容保存到文件中去。上機驗證程序的功能。思考:上面兩種文件操作方式有什么不同。

注:文本文件的內容只有文字、符號、數字,不含圖片、格式、排版等內容,能直接用記事本打開讀懂,如:*.txt、*.c等就是文本文件。

10.2文件的操作

常用的順序讀寫函數(二)2.從文件中讀取字符串:char*fgets(char*string,intn,FILE*stream);

作用:從stream所指的文件中讀取n?1個字符,放到以string為起始地址的存儲空間,若在n?1個字符前,遇到回車換行符或文件結束符,則操作結束,并在讀入的字符串后面加一個“\0”字符。

若操作成功,返回值為str的地址;

若出錯,返回值為NULL。向文件寫入字符串:intfputs(char*str,FILE*stream);

作用:將stream所表示的字符串內容(不包含字符串最后的“\0”)輸出到str所指的文件中去.

若操作成功,返回一個非負數;

若出錯,返回EOF。10.2文件的操作例4:閱讀和分析程序【例10-4】上機驗證程序的功能,了解文件讀取方式。例5:閱讀和分析程序【例10-5】上機驗證程序的功能,了解文件的寫入方式。思考:上面兩種文件操作方式有什么意義。10.2文件的操作

常用的順序讀寫函數(三)3.按格式化讀取字符:intfscanf(FILE*stream,char*format,&arg1,&arg2,…,&argn);

按格式化寫入字符:intfprinft(FILE*stream,char*format,arg1,arg2,…argn);例6:閱讀和分析程序【例10-6】上機驗證程序的功能。思考:比較【例10-4】的程序有什么不同?例7:閱讀和分析程序【例10-7】上機驗證程序的功能。思考:比較【例10-5】的程序有什么不同?10.2文件的操作10.2.4文件的隨機讀寫

對文件進行讀寫操作時,可以對文件中指定位置的信息進行讀寫操作。

需要對文件進行準確定位,再對文件進行隨機讀寫。

適合于具有固定長度記錄的文件。

系統提供的隨機讀寫的定位函數原型在stdio.h中。10.2文件的操作1.文件定位函數原型intfseek(FILE*stream,longoffset,intposition);如:fseek(fp,d,pos);作用:把文件指針fp移動到距pos為d個字節的地方。若定位成功,返回值為0;若定位失敗,返回非零值。

d為位移量,d的取值有以下兩種情況:①d>0,表示fp向前(向文件尾)移動;②d<0,表示fp向后(向文件頭)移動。

pos為起始位置,pos的取值有以下3種可能的情況:①pos=0或pos=SEEK_SET,表示文件指針在文件的開始處;②pos=1或pos=SEEK_CUR,表示文件指針在當前文件指針位置;③pos=2或pos=SEEK_END,表示文件指針在文件尾。10.2文件的操作2.位置函數原型longintftell(FILE*stream);

如:loc=ftell(fp);作用:將fp所指位置距文件頭的偏移量的值賦予長整型變量loc。若正確,則loc≥0;若出錯,則loc=?1L3.重定位函數原型voidrewind(FILE*stream);

如:rewind(fp);作用:將文件指針fp重新指向文件的開始處。10.2文件的操作

文件隨機讀寫函數:intfread(void*buf,intsize,intcount,FILE*stream);作用:從stream所指的文件中讀取count個數據項;

每一個數據項的長度為size個字節;

放到由buf所指的塊中(buf通常為字符數組);

讀取的字節總數為size×count。若成功,返回值為數據項數(count的值);若出錯或到達文件尾,返回值小于count。10.2文件的操作例8:閱讀和分析程序【例10-8】上機驗證程序的功能。思考:比較【例10-4】和【例10-6】的程序有什么不同?例9:閱讀和分析程序【例10-9】上機驗證程序的功能。思考:比較【例10-5】和【例10-7】的程序有什么不同?intfwrite(void*buf,intsize,intcount,FILE*stream);作用:將cou

溫馨提示

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

評論

0/150

提交評論