




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第11章 文 件 在程序運行時,程序本身和數據一般都存放在內存中。當程序運行結束后,存放在內存中的數據被釋放。 如果需要長期保存程序運行所需的原始數據,或程序運行產生的結果,就必須以文件形式存儲到外部存儲介質上。11.1 語言文件概述 1文件與文件名 文件是指存放在外部存儲介質上的數據集合。 為標識一個文件,每個文件都必須有一個文件名,其一般結構為:主文件名.擴展名 文件命名規則,遵循操作系統的約定。2文件分類 可以從不同的角度對文件進行分類: (1)根據文件的內容,可分為程序文件和數據文件,程序文件又可分為源文件、目標文件和可執行文件。 (2)根據文件的組織形式,可分為順序存取文件和隨機存取
2、文件。(3)根據文件的存儲形式,可分為ASCII碼文件和二進制文件。 ASCII碼文件的每1個字節存儲1個字符,因而便于對字符進行逐個處理。但一般占用存儲空間較多,而且要花費轉換時間(二進制與ASCII碼之間的轉換)。 二進制文件是把內存中的數據,原樣輸出到磁盤文件中。可以節省存儲空間和轉換時間,但1個字節并不對應1個字符,不能直接輸出字符形式。3讀文件與寫文件 所謂讀文件是指,將磁盤文件中的數據傳送到計算機內存的操作。 所謂寫文件是指,從計算機內存向磁盤文件中傳送數據的操作。4文件類型FILE 系統給每個打開的文件都在內存中開辟一個區域,用于存放文件的有關信息(如文件名、文件位置等)。這些信
3、息保存在一個結構類型變量中,該結構類型由系統定義、取名為FILE。注意:結構類型名“FILE”必須大寫。5ANSI C的緩沖文件系統 所謂緩沖文件系統是指,系統自動地在內存區為每個正在使用的文件開辟一個緩沖區。 從內存向磁盤輸出數據時,必須首先輸出到緩沖區中。待緩沖區裝滿后,再一起輸出到磁盤文件中。 從磁盤文件向內存讀入數據時,則正好相反:首先將一批數據讀入到緩沖區中,再從緩沖區中將數據逐個送到程序數據區。11.2 文件的打開與關閉 對文件進行操作之前,必須先打開該文件;使用結束后,應立即關閉,以免數據丟失。 語言規定了標準輸入輸出函數庫,用fopen()函數打開一個文件,用fclose()函
4、數關閉一個文件。 11.2.1 文件的打開fopen()函數 1用法: FILE *pf; pf=fopen(“文件名”,“操作方式); 2功能:返回一個指向指定文件的指針。 3函數原型:stdio.h 。注:對文件操作的庫函數,函數原型均在頭文件stdio.h中。(1)“文件名”是指要打開(或創建)的文件名。如果使用字符數組(或字符指針),則不使用雙引號。(2)“操作方式”。 例如,FILE *fp; fpfopen(data.99,r);3說明 如果不能實現打開指定文件的操作,則fopen()函數返回一個空指針NULL (其值在頭文件stdio.h中被定義為)。 為增強程序的可靠性,常用下
5、面的方法打開一個文件: if(fp=fopen(文件名,操作方式)=NULL) printf(can not open this filen); exit(0); 關于exit()函數1)用法:void exit(程序狀態值);2)功能:關閉已打開的所有文件,結束程序運行,返回操作系統,并將“程序狀態值”返回給操作系統。當“程序狀態值”為時,表示程序正常退出;非值時,表示程序出錯退出。11.2.2 文件的關閉fcolse()函數1用法: int fclose(FILE *文件指針);2功能:關閉“文件指針”所指向的文件。如果正常關閉了文件,則函數返回值為;否則,返回值為非。例如,fclose(
6、fp);/*關閉fp所指向的文件*/11.3 文件的讀寫操作 文件打開之后,就可以對它進行讀與寫的操作了。11.3.1 讀寫文件中的一個字符1將一個字符寫到文件中fputc()函數庫函數fputc():1)用法:int fputc(字符數據,文件指針); 其中“字符數據”,既可以是字符常量,也可以是字符變量。2)功能:將字符數據輸出到“文件指針”所指向的文件中去,同時將讀寫位置指針向前移動1個字節(即指向下一個寫入位置)。 如果輸出成功,則函數返回值就是輸出的字符數據;否則,返回一個符號常量EOF(其值在頭文件stdio.h中,被定義為-1)。2從文件中讀入一個字符fgetc()函數和feof
7、()函數(1)庫函數fgetc() 1)用法:int fgetc(文件指針); 2)功能:從“文件指針”所指向的文件中,讀入一個字符,同時將讀寫位置指針向前移動1個字節(即指向下一個字符)。該函數無出錯返回值。 例如,fgetc(fp)表達式,從文件fp中讀一個字符,同時將fp的讀寫位置指針向前移動到下一個字符。 (2)庫函數feof(): 1)用法:int feof(文件指針); 2)功能:在執行讀文件操作時,如果遇到文件尾,則函數返回邏輯真(1);否則,則返回邏輯假(0)。feof()函數同時適用于ASCII碼文件和二進制文件。 例如,!feof(input)表示源文件(用于輸入)未結束,
8、循環繼續。(1) 庫函數fputs()向指定文件輸出一個字符串1)用法:int fputs(字符串,文件指針); 其中“字符串”可以是一個字符串常量,或字符數組名,或字符指針變量名。2)功能:向指定文件輸出一個字符串,同時將讀寫位置指針向前移動strlength(字符串長度)個字節。如果輸出成功,則函數返回值為;否則,為非值。11.3.2 讀寫一個字符串fgets()和fputs()(2) 庫函數fgets()從文件中讀一個字符串 1)用法:char *fgets(指針,串長度+1,文件指針); 2)功能:從指定文件中讀入一個字符串,存入“字符數組指針”中,并在尾端自動加一個結束標志0;同時,
9、將讀寫位置指針向前移動strlength(字符串長度)個字節。 如果在讀入規定長度之前遇到文件尾EOF或換行符,讀入即結束。11.3.3 讀寫一個數據塊fread()和fwrite()實際應用中,常常要求1次讀寫1個數據塊。為此,ANSI C 標準設置了 fread( ) 和fwrite()函數。 1用法:int fread(void *buffer,int size,int count,FILE *fp);int fwrite(void *buffer,int size,int count,FILE *fp); 2功能:fread()從fp所指向文件的當前位置開始,一次讀入size個字節,重
10、復count次,并將讀入的數據存放到從buffer開始的內存中;同時,將讀寫位置指針向前移動size* count個字節。其中,buffer是存放讀入數據的起始地址(即存放何處)。fwrite()從buffer開始,一次輸出size個字節,重復count次, 并將輸出的數據存放到fp所指向的文件中;同時,將讀寫位置指針向前移動size* count個字節。其中,buffer是要輸出數據在內存中的起始地址(即從何處開始輸出)。如果調用fread()或fwrite()成功,則函數返回值等于count。fread()和fwrite()函數,一般用于二進制文件的處理。Return11.3.4 對文件進
11、行格式化讀寫fscanf()和fprintf()函數 與scanf()和printf()函數的功能相似,區別在于:fscanf()和fprintf()函數的操作對象是指定文件,而scanf()和printf()函數的操作對象是標準輸入(stdin)輸出(stdout)文件。 int fscanf(文件指針,格式符,輸入變量首地址表); int fprintf(文件指針,格式符,輸出參量表); 例如,. int i=3; float f=9.80; . fprintf(fp,%2d,%6.2f, i, f); . fprintf()函數的作用是,將變量i按%2d格式、變量f按%6.2f格式, 以
12、逗號作分隔符,輸出到fp所指向的文件中:3,9.80(表示1個空格)。11.3.5 讀寫函數的選用原則從功能角度來說,fread()和fwrite()函數可以完成文件的任何數據讀寫操作。 但為方便起見,依下列原則選用: 1讀/寫1個字符(或字節)數據時:選用fgetc()和fputc()函數。 2讀/寫1個字符串時:選用fgets()和fputs()函數。 3讀/寫1個(或多個)不含格式的數據時:選用fread()和fwrite()函數。 4讀/寫1個(或多個)含格式的數據時:選用fscanf()和fprintf()函數。Return11.4 位置指針與文件定位文件中有一個讀寫位置指針,指向當
13、前的讀寫位置。每次讀寫1個(或1組)數據后,系統自動將位置指針移動到下一個讀寫位置上。 如果想改變系統這種讀寫規律,可使用有關文件定位的函數。 13.4.1 位置指針復位函數rewind() 1用法:int rewind(文件指針); 2功能:使文件的位置指針返回到文件頭。 13.4.2 隨機讀寫與fseek()函數 對于流式文件,既可以順序讀寫,也可隨機讀寫,關鍵在于控制文件的位置指針。 所謂順序讀寫是指,讀寫完當前數據后,系統自動將文件的位置指針移動到下一個讀寫位置上。所謂隨機讀寫是指,讀寫完當前數據后,可通過調用fseek()函數,將位置指針移動到文件中任何一個地方。 1用法:int fseek(文件指針,位移量,參照點); 2功能:將指定文件的位置指針,從參照點開始,移動指定的字節數。(1)參照點:用0(文件頭)、1(當前位置)和(文件尾)表示。在ANSI C標準中,還規定了下面的名字: SEEK_SET文件頭, SEEK_CUR當前位置, SEEK_END文件尾(2)位移量:以參照點為起點,向前(當位移量時)或后(當位移量時)移動的字節數。fseek()函數一般用于二進制文件。不是結束
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 手術后的心理咨詢需求
- 費改車險基礎知識
- 防毒面罩的培訓和講解
- 青光眼個案護理
- 頒獎禮儀流程
- 面點知識教學
- 黃山健康職業學院《裝配式建筑施工技術》2023-2024學年第一學期期末試卷
- 浙江省溫州市甌海區聯盟校2025年六年級下學期小升初數學試卷含解析
- 首都師范大學科德學院《磁性材料》2023-2024學年第二學期期末試卷
- 南寧師范大學《廣告心理學》2023-2024學年第一學期期末試卷
- GB/T 20623-2006建筑涂料用乳液
- GB 15322.2-2019可燃氣體探測器第2部分:家用可燃氣體探測器
- 飯店管理概論全套課件
- shiy實驗:探究小車速度速度隨時間變化的規律
- 鋼筋加工棚搭設方案
- 六年級下冊美術第10課頭飾和帽子蘇少版課件
- 來料檢驗標準書模板
- 二年級下冊心理健康課件-第二十三課 勤儉節約|北師大版 (共21張PPT)
- 小學班主任工作經驗交流ppt
- 新版現代西班牙語第二冊答案
- 福州市《加強我市建筑模板工程施工質量管理若干規定》
評論
0/150
提交評論