1,兩種文件存取方式(輸入,輸出方式) 順序存取 直接存取 2,數據的兩種存放形式 文本文件 二進制文件 13.2文件指針 定義文件類型指針變量的一般形式: FILE *指針變量名; 例如: FILE *fp1,*fp2; 13.3打開文件 在使用文件之前,需打開文件.在C裏使用fopen函數打開文件.格式爲: fopen(文件名,文件使用方式); 此函數返回一個指向FILE類型的指針.如: FILE *fp; fp=fopen("file_1","r"); 如果調用成功,fp就指向file_1,否則返回爲NULL,所以爲了保證文件的正確使用,要進行測試.採用如下語句: If((fp=fopen("file_1","r"))==NULL) { printf("Cannot open this file\n"); exit(0); } 最常用的文件使用方式及其含義如下: 1,"r".爲讀而打開文本文件.(不存在則出錯) 2,"rb".爲讀而打開二進制文件. 3,"w".爲寫而打開文本文件.(若不存在則新建,反之,則從文件起始位置寫,原內容將被覆蓋) 4,"wb".爲寫而打開二進制文件. 5,"a".爲在文件後面添加數據而打開文本文件.(若不存在,則新建;反之,在原文件後追加) 6,"ab".爲在文件後面添加數據而打開一個二進制文件. 最常用的文件使用方式及其含義如下: 7,"r+".爲讀和寫而打開文本文件.(讀時,從頭開始;在寫數據時,新數據只覆蓋所佔的空間,其後不變) 8,"rb+".爲讀和寫而打開二進制文件.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置. 9,"w+".首先建立一個新文件,進行寫操作,隨後可以從頭開始讀.(若文件存在,原內容將全部消失) 10,"wb+".功能與"w+"同.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置. 最常用的文件使用方式及其含義如下: 11,"a+".功能與"a"相同;只是在文件尾部添加新的數據後,可以從頭開始讀. 12,"ab+".功能與"a+"相同;只是在文件尾部添加新數據之後,可以由位置函數設置開始讀的起始位置. “rt” 只讀打開一個文本文件,只允許讀數據 “wt” 只寫打開或建立一個文本文件,只允許寫數據 “at” 追加打開一個文本文件,並在文件末尾寫數據 “rb” 只讀打開一個二進制文件,只允許讀數據 “wb” 只寫打開或建立一個二進制文件,只允許寫數據 “ab” 追加打開一個二進制文件,並在文件末尾寫數據 “rt+” 讀寫打開一個文本文件,允許讀和寫。用fseek確定讀寫位置,寫多少覆蓋多少,後面的內容保留。因爲磁盤空間是連續的,所以你不能在中間插入,在中間一旦寫入就是覆蓋與寫入內容等長的那些內容。 “wt+” 讀寫打開或建立一個文本文件,允許讀寫 “at+” 讀寫打開一個文本文件,允許讀,或在文件末追加數據 “rb+” 讀寫打開一個二進制文件,允許讀和寫 “wb+” 讀寫打開或建立一個二進制文件,允許讀和寫 “ab+” 讀寫打開一個二進制文件,允許讀,或在文件末追加數據 13.4關閉文件 當文件的讀寫操作完成之後,使用fclose函數關閉文件.格式如下: fclose(文件指針) 如:fclose(fp); 13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出 1,調用putc(或fputc)函數輸出一個字符 調用形式爲: putc(ch,fp); 功能是:將字符ch寫到文件指針fp所指的文件中去.當輸出成功,putc函數返回所輸出的字符;否則,返回一個EOF值.EOF是在stdio.h庫 函數文件中定義的符號常量,其值等於-1. 13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出 例如:把從鍵盤輸入的文本按原樣輸出到名爲file_1.dat文件中,用字符@作爲鍵盤輸入結束標誌. #include Void main() { FILE *fpout; char ch; if(fpout=fpopen("file_1","w")==NULL) { printf("Cannot open this file!\n"); exit(0); } ch=getchar(); while(ch!='@') { fputc(ch,fpout); ch=getchar(); } fclose(fpout); } 2.調用getc(或fgetc)函數輸入一個字符 調用形式爲: ch=getc(pf); 功能是:從pf指定的文件中讀如一個字符,並把它作爲函數值返回. 例如:把一個已存在磁盤上的file_1.dat文本文件中的內容,原樣輸出到終端屏幕上. #include void main(){ FILE *fpin; char ch; if((fpin=fopen("file_1.dat","r"))==NULL) { printf("Cann't open this file!\n");exit(0);} ch=fgetc(fpin); while (ch!=EOF) { putchar(ch); ch=fgetc(fpin);} fclose(fpin); } 13.6判斷文件結束函數feof EOF可以作爲文本文件的結束標誌,但不能作爲二進制文件的結束符.feof函數既可以判斷二進制文件,又可以判斷文本文件. 例:編寫程序,用於把一個文本文件(源)複製到另一個文件(目的)中,源文件名和目的文件名由命令行輸入.命令形式如下: 可執行程序名 源文件名 目的文件名 #include void filecopy(FILE* ,FILE *); void main(int argc,char *argv[]){ FILE *fpin,*fpout; if(argc==3) { fpin=fopen(argv[1],"r"); fpout=fopen(argv[2],"w"); filecopy(fpin,fpout); fclose(fpin);fclose(fpout); } else if(argc>3) printf("The file names too many!!\n"; else printf("There are no file names for input or output!!\n ); } void filecopy(FILE *fpin,FILE *fpout) { char ch; ch=getc(fpin); while(!feof(fpin)) {putc(ch,fpout); ch=getc(fpin);} } 13.7fscanf函數和fprintf函數 1,fscanf函數 fscanf只能從文本文件中按格式輸入,和scanf函數相似,只不過輸入的對象是磁盤上文本文件中的數據.調用形式爲: fscanf(文件指針,格式控制字符串,輸入項表) 例如:fscanf(fp,"%d%d",&a,&b); fscanf(stdin,"%d%d",&a,&b); 等價於scanf("%d%d",&a,&b); 3.fprintf函數 fprintf函數按格式將內存中的數據轉換成對應的字符,並以ASCII代碼形式輸出到文本文件中.Fprintf函數和printf函數相似,只是 將輸出的內容按格式存放到磁盤的文本文件中.調用形式如下: fprintf(文件指針,格式控制字符串,輸出項表) 如:fprintf(fp,"%d %d",x,y); 以下語句 fprintf(stdout,"%d %d",x,y) 13.8fgets函數和fputs函數 1,fgets函數 fgets函數用來從文件中讀入字符串.調用形式如下: fgets(str,n,fp); 函數功能是:從fp所指文件中讀入n-1個字符放入str爲起始地址的空間內;如果在未讀滿n-1個字符時,則遇到換行符或一個EOF結束本次讀操作, 並已str作爲函數值返回. 13.8fgets函數和fputs函數 2,fputs函數 fput函數把字符串輸出到文件中.函數調用形式如下: fputs(str,fp); 注意:爲了便於讀入,在輸出字符串時,應當人爲的加諸如"\n"這樣的字符串. 13.9fread函數和fwrite函數 fread and fwrite函數用來讀,寫二進制文件.它們的調用形式如下: fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); buffer:要輸入或輸出的數據塊的首地址 count:每讀寫一次,輸入或輸出數據塊的個數 size:每個數據塊的字節數 fp:文件指針 13.9fread函數和fwrite函數 例如有如下結構體: struct st{ char num[8]; float mk[5]; }pers[30]; 以下循環將把這30個元素中的數據輸出到fp所指文件中. for(i=0;i} 13.10文件定位函數 1,fseek函數 fseek函數用來移動文件位置指針到指定的位置上,接着的讀或寫操作將從此位置開始.函數的調用形式如下: fseek(pf,offset,origin) pf:文件指針 offset:以字節爲單位的位移量,爲長整形. origin:是起始點,用來指定位移量是以哪個位置爲基準的. 1,fseek函數 位移量的表示方法 標識符 數字 代表的起始點 SEEK_SET 0 文件開始 SEEK_END 2 文件末尾 SEEK_CUR 1 文件當前位置 假設pf已指向一個二進制文件,則; fseek(pf,30L,SEEK_SET) fseek(pf,-10L*sizeof(int),SEEK_END) 對於文本文件,位移量必須是0;如: fseek(pf,0L,SEEK_SET) fseek(pf,0L,SEEK_END) 2. ftell函數 ftell函數用以獲得文件當前位置指針的位置,函數給出當前位置指針相對於文件開頭的字節數.如; long t; t=ftell(pf); 當函數調用出錯時,函數返回-1L. 我們可以通過以下方式來測試一個文件的長度: fseek(fp,0L,SEEK_END); t=ftell(fp); 3.rewind函數 調用形式爲: rewind(pf); 函數沒有返回值.函數的功能是使文件的位置指針回到文件的開頭. 本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/63991/showart_1740895.html |
C語言文件操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.