第1章文件操作_第1頁
第1章文件操作_第2頁
第1章文件操作_第3頁
第1章文件操作_第4頁
第1章文件操作_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、白 雪 飛中國科學(xué)技術(shù)大學(xué)電子科學(xué)與技術(shù)系dept. of elec. sci. & tech., ustcfall, 2007第第10章章 文件操作文件操作目 錄l文件概述l文件類型指針l文件的打開和關(guān)閉l文件的讀寫l文件的定位文件 (file)lc語言中的文件nc語言把文件看作一個字節(jié)的序列nc語言對文件的存取是以字節(jié)為單位的l文本文件(ascii文件)n按數(shù)據(jù)的ascii形式存儲l二進制文件n按數(shù)據(jù)在內(nèi)存中的二進制形式存儲文本文件和二進制文件緩沖文件系統(tǒng)文件類型指針lfile類型n保存被使用的文件的有關(guān)信息n所有的文件操作都需要file類型的指針nfile是庫文件中定義的結(jié)構(gòu)體的

2、別名n注意不要寫成struct filel舉例nfile *fp;file類型typedef struct short level; /*緩沖區(qū)滿空程度*/ unsigned flags; /*文件狀態(tài)標(biāo)志*/ char fd; /*文件描述符*/ unsigned char hold; /*無緩沖則不讀取字符*/ short bsize; /*緩沖區(qū)大小*/ unsigned char *buffer; /*數(shù)據(jù)緩沖區(qū)*/ unsigned char *curp; /*當(dāng)前位置指針*/ unsigned istemp; /*臨時文件指示器*/ short token; /*用于有效性檢查*/

3、 file;文件的打開 (fopen函數(shù))l函數(shù)原型nfile *fopen(char *filename, char *mode);l參數(shù)說明nfilename:要打開的文件路徑nmode :打開模式l返回值n若成功,返回指向被打開文件的指針n若出錯,返回空指針null(0)文件的打開模式打開模式描 述r只讀,打開已有文件,不能寫w只寫,創(chuàng)建或打開,覆蓋已有文件a追加,創(chuàng)建或打開,在已有文件末尾追加r+讀寫,打開已有文件w+讀寫,創(chuàng)建或打開,覆蓋已有文件a+讀寫,創(chuàng)建或打開,在已有文件末尾追加t按文本方式打開 (缺省)b按二進制方式打開文件的打開舉例file *fp1, *fp2, *fp3

4、;char filename=file3.dat;/* 以文本只讀方式打開file1 */if (!(fp1=fopen(file1, r) printf(cannot open this file!n); exit(0); /* 退出程序 */ /* 以二進制讀寫方式打開file2.txt */fp2=fopen(c:homefile2.txt, rb+);/* 以二進制讀寫方式打開file3.dat */fp3=fopen(filename, a+b);文件的關(guān)閉 (fclose函數(shù))l函數(shù)原型nint fclose(file *fp);l參數(shù)說明nfp:要關(guān)閉的文件指針l返回值n若成功,

5、返回0n若出錯,返回eof(-1)l不用的文件應(yīng)關(guān)閉,防止數(shù)據(jù)破壞丟失文件的關(guān)閉舉例file *fp;char file=d:userstudents.dat;if (!(fp=fopen(file, rb+) printf(open file %s error!n, file); exit(0); . .fclose(fp);文件的讀寫函數(shù)功能函數(shù)功能fputc輸出字符fprintf格式化輸出fgetc輸入字符fscanf格式化輸入putc輸出字符putw輸出一個字getc輸入字符getw輸入一個字fwrite輸出數(shù)據(jù)塊fputs輸出字符串fread輸入數(shù)據(jù)塊fgets輸入字符串feof函數(shù)

6、l函數(shù)原型nint feof(file *fp);l參數(shù)nfp:文件指針l返回值n若文件結(jié)束,返回非零值n若文件尚未結(jié)束,返回0fputc/putc函數(shù)l函數(shù)原型nint fputc(int c, file *fp);nint putc(int c, file *fp);l參數(shù)nc :要輸出到文件的字符nfp:文件指針l返回值n若成功,返回輸出的字符n若失敗,返回eoffgetc/getc函數(shù)l函數(shù)原型nint fgetc(file *fp);nint getc(file *fp);l參數(shù)nfp:文件指針l返回值n若成功,返回輸入的字符n若失敗或文件結(jié)束,返回eoffputc和fgetc函數(shù)舉

7、例file *fp1, *fp2;char c;fp1 = fopen(file.in, r);fp2 = fopen(file.out, w);while(!feof(fp1) c = fgetc(fp1); fputc(c, fp2); fclose(fp1);fclose(fp2);fwrite和fread函數(shù) (1)l函數(shù)原型nsize_t fwrite(void *buffer, size_t size, size_t count, file *fp);nsize_t fread (void *buffer, size_t size, size_t count, file *fp);

8、fwrite和fread函數(shù) (2)l參數(shù)nbuffer:要讀/寫的數(shù)據(jù)塊地址nsize :要讀/寫的每個數(shù)據(jù)項的字節(jié)數(shù)ncount :要讀/寫的數(shù)據(jù)項數(shù)量nfp :文件指針l返回值n若成功,返回實際讀/寫的數(shù)據(jù)項數(shù)量n若失敗,一般返回0fwrite和fread函數(shù)舉例file *fp;int i;struct stud snum;fp=fopen(students.dat,rb+);for (i=0; inum; i+) fwrite(s+i,sizeof(struct stud),1,fp);for (i=0; inum; i+) fread(s+i,sizeof(struct stud)

9、,1,fp);fclose(fp);fprintf和fscanf函數(shù)l函數(shù)原型nint fscanf(file *fp, char *format,address,.);nint fprintf(file *fp, char *format,argument,.);l說明n與printf和scanf函數(shù)類似n從文件輸入或輸出到文件putw函數(shù)l函數(shù)原型nint putw(int w, file *fp);l參數(shù)nw :要輸出到文件的整數(shù)(字)nfp:文件指針l返回值n若成功,返回輸出的整數(shù)(字)n若失敗,返回eofgetw函數(shù)l函數(shù)原型nint getw(file *fp);l參數(shù)nfp:文件

10、指針l返回值n若成功,返回輸入的整數(shù)(字)n若失敗,返回eoffputs函數(shù)l函數(shù)原型nint fputs(char *s, file *fp);l返回值n若成功,返回輸出字符個數(shù)(或最后的字符)n若失敗,返回eofl說明n字符串的結(jié)束標(biāo)志0不會輸出到文件n也不會在字符串末尾自動添加換行符fgets函數(shù)l函數(shù)原型nchar *fgets(char *s, int n, file *fp);l返回值n若成功,返回s首地址;若失敗,返回nulll說明n從fp輸入字符串到s中n輸入n-1個字符,或遇到換行符或eof為止n讀完后自動在字符串末尾添加0文件的定位l文件位置指針n位置指針指向當(dāng)前讀寫的位置n每次讀寫文件,位置指針都會相應(yīng)移動n可以通過相關(guān)函數(shù)強制修改位置指針l相關(guān)函數(shù)nrewind函數(shù)nfseek函數(shù)nftell函數(shù)rewind函數(shù)l函數(shù)原型nvoid rewind(file *fp);l參數(shù)nfp:文件指針l功能n使文件位置指針重新返回文件開頭fseek函數(shù) (1)l函數(shù)原型nint fseek(file *fp, long offset, int whence);l參數(shù)nfp :文件指針noffset:偏移量nwhence:起始位置l功能n隨機改變文件的位置指針fseek函數(shù) (2)l起始位置nseek_set(0):文件開始nseek_cur(1):文件當(dāng)前位置nsee

溫馨提示

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

評論

0/150

提交評論