




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C語言文件操作詳解在c語言文件操作的過程中,通常有以下幾種方式:1. 單個字符的操作:fputc 函數(shù)原型:int fputc(int c, FILE *fp);功能:把一字節(jié)代碼c寫入fp指向的文件中返回值:正常,返回C;出錯,為EOF(-l) fgetc函數(shù)原型:int fgetc(FILE *fp);功能:從fp指向的文件中讀取一字節(jié)代碼返回值:正常,返回讀到的代碼值;讀到文件尾或出錯,為 EOF(-l) feof函數(shù)原型:int feof(FILE *fp);功能:判斷文件是否到末尾返回值:文件未結束,返回0;文件結束,返回真(非() 示例:# include <stdio.h&
2、gt;#include <stdlib.h> void main()char ch;FILE *fpl = fopenC'diWa.daf, HwbM);/* 以寫的方式打開二進制文件 */ if(NULL =fpl) printf("Can not open this file!n M); exit(0);1printf("please input a string:");ch = getchar();while(ch匚#) /*輸入#號結束*/ fputc(ch, fpl); /*依次向文件中寫*/ ch = getchar();fflus
3、h(stdin); /* 清空輸入緩沖區(qū) */ fclose(fpl); /* 關閉文件 */FILE *fp2 二 fopen(" a.dat ",“rlibX謝的方式打開二進制文件 */ if(NULL = fp2)printf("Can not open this file!n M); exit(O);while(!feof(fp2)/*判斷是否到達文件末尾*/ch = fgetc(fp2);/*從文件中依次讀取*/putchar(ch);/*清空輸出緩沖區(qū)*/putchar('n');fflush(stdout);fclose(fp2);/
4、*關閉文件*/注意:putc(ch,fp)與fputc(ch,fp)效果一致,但是putc可以作為宏替換,速度更快getc(fp)與fgetc(fp)效果一致)但是getc可以作為宏替換)速度更快putchar(c)貝U是fputc(c,stdout)getchar(狽U是 fgetc(stdin)2. 對字符串的操作:char *fgets(char *s, int n, FILE *fp)int fputs(char *s, FILE *fp)功能:fgets:從fp指向的文件中讀一個長度為n的字符串,保存到s中。其中char* s要 是 已經(jīng)有內存空間的,通常是用數(shù)組定義的,或者用cha
5、r*則要用malloc分配內存。fputs:向fp所指向的文件中寫入字符串So返回值:fgets:正常時返回讀取字符串的首地址;出錯或文件尾,返回 NULL fputs :正常時返回寫入的最后一個字符;出錯為 EOF (-1)示例:#include <stdio.h>#include <stdlib.h>#include <string.h>void main()FILE *fp;char string100;if(fp = fopen("file.txt H, " W= NULL)printf("cann't open
6、 this file!n"); exit(O);while(strlen(gets(string) > 0) /*從鍵盤輸入字符串)回車停止 */fputs(string, fp); /*將字符串寫入文件*/fputs("n", fp); /* 在最后加上一個'n'*/fclose(fp);if(fp = fopen("file.txt'V'r") = NULL)printfCAannl open this file!n u);exit(O);Iwhile(fgets(string, 10, fp) !=
7、NULL) /* 判斷是否到達文件末尾 */ fputs(string, stdout); /* 等價于 puts(string); */fclose(fp);3. 對二進制形式的塊讀寫:函數(shù)原型:size_t fread(void *buffer,size_t size, size_t count, FILE *fp);size_t fwrite(void *buffer,size_t size, size_t count, FILE *fp);功能:讀/寫數(shù)據(jù)塊fread與fwrite 一般用于二進制文件的輸入/輸出fread:從fp所指向的文件中讀取count個塊,每個塊的長度為size
8、個字節(jié),存放 到以 buffer為首地址的內存中。其中buffer必須已經(jīng)是有內存空間的。fwrite :從以buffer為首地址的內存中讀取count個塊,每個塊的長度為size個字節(jié), 寫入到fp所指向的文件中。返回值:成功,返回讀/寫的塊數(shù);出錯或文件尾,返向 0說明:buffer:指向要輸入/輸出數(shù)據(jù)塊的首地址的指針size:讀/寫的數(shù)據(jù)塊的大小(字節(jié)數(shù))count:要讀/寫的數(shù)據(jù)塊的個數(shù)fp:要讀/寫的文件指針示例:#inelude <stdio.h>#include <stdlib.h>typedef struct STUDENTchar sNo5;char
9、 sName20;double score;STUDENT;void main()/*只對單個的時候*/int x = 19;/int y = 0;/ FILE * fp = fopen(,dWa.dat,? " wb ");/ if(NULL = fp)/fwrite(&x, sizeof(x),1, fp);/fclose(fp);/ fp = fopcn( " a.dal ; " rb ;)/if(NULL = fp)/printf( uCan not open this file!nM);/exit(O);/fread(&y, s
10、izeof(y),1, fp);/printf(n%dnH,y);/fclose(fp);/*對于塊的時候*/ intx口 = l,2,3,4,5,6,7,8,9;/int y9=0;/int i;/FILE*fp=fopenC'drWa.txf, ; “wb”)/ if(NULL = fp)/printf("Can not open this file!n M);/exit(O);/fwrite(x, sizeof(int), sizeof(x)/sizeof(inl), fp);/fclose(fp);/fp = fopen( a.dxF',nrbH);/if(N
11、ULL = fp)/printf("Can not open this file!n");/exit(0);/fread(y, sizeof(int), sizeof(y)/sizeof(int), fp);/for(i = 0; i < 9; i+)/printf(u%d " yi);/printf(,nu);/fclose(fp);/*操作一塊*/STUDENT stu3 = “0001,"“ 趙軍 ”,89,“ 0002/ “ 李千”,90,“0003”'張芳”,100;STUDENT stu2;FILE* fp = fopen( H
12、d:b.txtM, " wb+”;)if(NULL = fp)printf( uCan not open this file!nM); exit(0);fwrite(stu, sizeof(STUDENT), sizeof(stu)/sizeof(STUDENT), fp);rewind(fp); /*文件指針重新回到頭*/fseek(fp, sizeof(STUDENT), SEEK_SET);/* 定位,此處跳過一條記錄 */ fread(&stu2,sizeof(STUDENT), l,fp);/* 從文件中讀取指定大小的塊 */ printf("%s >
13、;%s >%lfn", stu2.sNo, stu2.sName, stu2.score);fclose(fp);14. 格式化操作文本文件:函數(shù)原型:int fprintf(FILE *fp,const char *format,argument,? ? ?)int fscanf(FILE *fp,const charaddress;,)功能:按格式對文件進行讀寫操作。二進制的文件不要用,而改用 fread和fwriteofprintf : 輸出列表中的各項數(shù)據(jù)按指定的格式寫入到 fp指向的文件中fscanf:從fp所指向的 文件中按指定的格式讀U又數(shù)據(jù)依次存放到輸出列表中的
14、各項。返回值:成功,返回讀寫的個數(shù);出錯或文件尾,返回EOF (-1), eg: fprintf(fp, %d,%6:2f ”, i,t); 將 i 和(按%d,%6.2f格式輸出到 fp 文件 fscanf(fp, %d,%f”, &i,&t); 若文 件中有3,4.5,則將3送入i, 4.5送入t示例:#include <stdio.h>#include <stdlib.h>void main()int a = 5, b;double x = 3.5, y;char szText(20 = "HelioWorld! M, szNewText
15、f20J;FILE* fp = fopen( ud:c.txtn,“ w+”)if(fp = NULL)fprintf(fp, "%d %lf %sn", a, x, szText);rewind(fp);文件指針重新回到頭fscanf(fp, "%d %lf %sn", &b, &y, szNewText); printf("%d lf %sn' b, y, szNewText);fclose(fp);5. rewind 函數(shù)函數(shù)原型:void rewind(FILE *fp)功能:重置文件位置指針到文件開頭返回值:無
16、6. fseek 函數(shù)函數(shù)原型:int fseek(F!LE *fp,long offset,int whence)功能:文件隨機定位函數(shù),改變文件位置指針的位置。一般用于二進制文件。返回值:成功,返回0;失敗,返回非0值Eg: fseek(fp,100L,0);fseek(fp,50L,l);fseek(fp,-10L,2);第2個參數(shù)offset表示相對whence為基點的偏移字節(jié)數(shù),要求是長整型數(shù)據(jù),可以是正整數(shù)(向 文件尾方向移動)、0 (不移動)、負整數(shù)(向文件頭方向移動)。第3個參數(shù)可以用如下的宏替換: 文件開始SEEK.SET 文件當前位置SEEK_CUR 文件末尾SEEK EN
17、D7. ftell 函數(shù)函數(shù)原型:long ftell(FILE *fp)功能:返向位置指針當前位置(用相對文件開頭的位移量表示)返回值:成功,返回當前位置指針位置(長整型);失敗,返回? 1L,可以利用fseek和ftell函 數(shù)實現(xiàn)求文件的元素個數(shù)。如下:#include <iostream>using namespace std;int main()FILE* fpl = fopen( Mc:a.txt", "w"); if(NULL =fpl) char c = '0*;while(c = getchar() != *#')fp
18、utc(c, fpl);fseek(fpl, OL, 2); 定位到文件末尾cout ? ftell(fpl) ? endl; 告訴當前文件指針的位置fclose(fpl);return 0;18. ferror 函數(shù)函數(shù)原型:int ferror(FILE *fp)功能:測試文件是否出現(xiàn)錯誤返回值:未出錯,0;出錯,非0說明:每次調用文件輸入輸出函數(shù),均產(chǎn)生一個新的feiror函數(shù)值,所以應及時測試fopen打開文件時,ferror函數(shù)初值自動置為09. remove 函數(shù)函數(shù)原型: int remove(char* path)功能:刪除指定路徑的文件返回值:成功刪除,0;否則,? 1舉例:如下# include <stdio.h>void main()if(-l = remove (" c.txt )力)刪除 d 盤下的 c.txtprintf("remove failed!n H);10. clearerr 函數(shù)函數(shù)原型: void clearerr(FILE *fp)功能:使文件錯誤標志置為0返回值:無說明:出錯后,錯誤標志一直保留,直到對同一文件調clearerr(fp)或rewind或任何其 它一個輸入輸出函數(shù)舉例:如下#include <stdio.h>int main
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中語文生活美文內心不平靜就不會幸福
- 河北省2024-2025學年高二化學寒假作業(yè)5無答案
- 高中語文情感美文楓紅一片染深秋
- 通過高科技助力企業(yè)的快速信任關系的構建方式探討
- 新課標2025版高考物理二輪復習專題二第2講機械能守恒定律功能關系精練含解析
- 貴州2025年02月貴州省林業(yè)局直屬事業(yè)單位公開招考17名工作人員筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 高中語文作文作一條痛苦的反向延長線
- 部編版四年級道德與法治下冊全冊教案
- 六不防溺水承諾書(32篇)
- 運動與健康學校體育教育的使命與未來
- 創(chuàng)傷中心匯報
- 2023年春節(jié)美化亮化工程施工用電預控措施和事故應急預案
- 2024年長沙職業(yè)技術學院單招職業(yè)技能測試題庫及答案解析
- 與醫(yī)保有關的信息系統(tǒng)相關材料-模板
- 聚乙烯(PE)孔網(wǎng)骨架塑鋼復合穩(wěn)態(tài)管
- 范文語文評課稿15篇
- 2016-2023年德州科技職業(yè)學院高職單招(英語/數(shù)學/語文)筆試歷年參考題庫含答案解析
- 外研版三年級下冊英語全冊教案(2024年2月修訂)
- 大學生返回母校宣講
- 丹尼斯人事規(guī)章(10年基層)崗前培訓
- 開展優(yōu)生優(yōu)育健康知識講座
評論
0/150
提交評論