在學習完譚浩強版c語言時,為了鞏固檔案操作,現將書中的知識點重寫與下:
內容主要包括檔案的開啟、檔案的關閉、檔案的讀寫等基本操作。
1.檔案的開啟fopen()
檔案的開啟操作表示將給使用者指定的檔案在記憶體分配乙個file結構區,並將該結構的指標返回給使用者程式,以後使用者程式就可用此file指標來實現對指定檔案的訪問操作了。當使用開啟函式時,必須給出檔名、檔案操作方式(讀、寫或讀寫),如果該檔名不存在,就意味著建立(只對寫檔案而言,對讀檔案則出錯),並將檔案指標指向檔案開頭。若已有乙個同名檔案存在,則刪除該檔案,若無同名檔案,則建立該檔案,並將檔案指標指向檔案開頭。
fopen(char *filename,char *type);
其中*filename是要開啟檔案的檔名指標,一般用雙引號括起來的檔名表示,也可使用雙反斜槓隔開的路徑名。而*type引數表示了對開啟檔案的操作方式。其可採用的操作方式如下:
方式 含義
"r" 開啟,唯讀
"w" 開啟,檔案指標指到頭,只寫
"a" 開啟,指向檔案尾,在已存在檔案中追加
"rb" 開啟乙個二進位制檔案,唯讀
"wb" 開啟乙個二進位制檔案,只寫
"ab" 開啟乙個二進位制檔案,進行追加
"r+" 以讀/寫方式開啟乙個已存在的檔案
"w+" 以讀/寫方式建立乙個新的文字檔案
"a+" 以讀/寫方式開啟乙個檔案檔案進行追加
"rb+" 以讀/寫方式開啟乙個二進位制檔案
"wb+" 以讀/寫方式建立乙個新的二進位制檔案
"ab+" 以讀/寫方式開啟乙個二進位制檔案進行追加
當用fopen(0成功的開啟乙個檔案時,該函式將返回乙個file指標,如果檔案開啟失敗,將返回乙個null指標。如想開啟test檔案,進行寫:
file *fp;
if((fp=fopen("test","w"))==null)
else
printf("file opened for writing\n");
⋯⋯fclose(fp);
2.關閉檔案函式fclose()
檔案操作完成後,必須要用fclose()函式進行關閉,這是因為對開啟的檔案進行寫入時,若檔案緩衝區的空間未被寫入的內容填滿,這些內容不會寫到開啟的檔案中去而丟失。只有對開啟的檔案進行關閉操作時,停留在檔案緩衝區的內容才能寫到該檔案中去,從而使檔案完整。再者一旦關閉了檔案,該檔案對應的file結構將被釋放,從而使關閉的檔案得到保護,因為這時對該檔案的訪問操作將不會進行。檔案的關閉也意味著釋放了該檔案的緩衝區。
int fclose(file *stream);
它表示該函式將關閉file指標對應的檔案,並返回乙個整數值。若成功地關閉了檔案,則返回乙個0值,否則返回乙個非0值。常用以下方法進行測試:
if(fclose(fp)!=0)
else
printf("file is now closed\n");
當開啟多個檔案進行操作,而又要同時關閉時,可採用fcloseall()函式,它將關閉所有在程式中開啟的檔案。
int fcloseall();
該函式將關閉所有已開啟的檔案,將各檔案緩衝區未裝滿的內容寫到相應的檔案中去,接著釋放這些緩衝區,並返回關閉檔案的數目。如關閉了4個檔案,則當執行:
n=fcloseall();
時,n應為4。
3.檔案的讀寫
(1).讀寫檔案中字元的函式(一次只讀寫檔案中的乙個字元):
int fgetc(file *stream);
int fgetchar(void);
int fputc(int ch,file *stream);
int fputchar(int ch);
int getc(file *stream);
int putc(int ch,file *stream);
其中fgetc()函式將把由流指標指向的檔案中的乙個字元讀出,例如:
ch=fgetc(fp);
將把流指標fp指向的檔案中的乙個字元讀出,並賦給ch,當執行fgetc()函式時,若當時檔案指標指到檔案尾,即遇到檔案結束標誌eof(其對應值為-1),該函式返回乙個-1給ch,在程式中常用檢查該函式返回值是否為-1來判斷是否已讀到檔案尾,從而決定是否繼續。
#include "stdio.h"
main()
while((ch=fgetc(fp))!=eof) fputc(ch,stdout);
fclose(fp);
}該程式以唯讀方式開啟myfile.txt檔案,在執行while迴圈時,檔案指標每迴圈一次後移乙個字元位置。用fgetc()函式將檔案指標指定的字元讀到ch變數中,然後用fputc()函式在螢幕上顯示,當讀到檔案結束標誌eof時,變關閉該檔案。
上面的程式用到了fputc()函式,該函式將字元變數ch的值寫到流指標指定的檔案中去,由於流指標用的是標準輸出(顯示器)的file指標stdout,故讀出的字元將在顯示器上顯示。又比如:
fputc(ch,fp);
該函式執行結構,將把ch表示的字元送到流指標fp指向的檔案中去。
注意,這裡使用char ch,其實是不科學的,因為最後判斷結束標誌時,是看ch!=eof,而eof的值為-1,這顯然和char是不能比較的。所以,某些使用,我們都定義成int ch。
(2).讀寫檔案中字串的函式
char *fgets(char *string,int n,file *stream);
char *gets(char *s);
int fprintf(file *stream,char *format,variable-list);
int fputs(char *string,file *stream);
int fscanf(file *stream,char *format,variable-list);
其中fgets()函式將把由流指標指定的檔案中n-1個字元,讀到由指標stream指向的字元陣列中去,例如:
fgets(buffer,9,fp);
將把fp指向的檔案中的8個字元讀到buffer記憶體區,buffer可以是定義的字元陣列,也可以是動態分配的記憶體區。
注意,fgets()函式讀到'\n'就停止,而不管是否達到數目要求。同時在讀取字串的最後加上'\0'。
fgets()函式執行完以後,返回乙個指向該串的指標。如果讀到檔案尾或出錯,則均返回乙個空指標null,所以長用feof()函式來測定是否到了檔案尾或者是ferror()函式來測試是否出錯,例如下面的程式用fgets()函式讀test.txt檔案中的第一行並顯示出來:
#include "stdio.h"
main()
while(!feof(fp))
fclose(fp);
}fprintf()和fscanf()同printf()和scanf()函式類似,不同之處就是printf()函式是想顯示器輸出,fprintf()則是向流指標指向的檔案輸出;fscanf()是從檔案輸入。
下面程式是向檔案test.dat裡輸入一些字元:
#include
main()
螢幕顯示
your score of toefl is: 617
that's good news
下面的程式是把上面的檔案test.dat裡的內容在螢幕上顯示出來:
#include
main()
執行後螢幕顯示:
your score of toefl is: 617
that's good news
c語言檔案操作
rt null ch fgetc fp while ch eof fclose fp 本 例程式的功能是從檔案中逐個讀取字元,在螢幕上顯示。程式定義了檔案指標fp,以讀文字檔案方式開啟檔案 d jrzh example ex1 1.c 並使fp指向該檔案。如開啟檔案出錯,給出提示並退出程式。程式第1...
C語言檔案操作
1.首先要理解幾個概念 檔案 按一定規則儲存在磁碟上的資料集合。檔名 能唯一標識某個磁碟檔案的字串。形式 碟符 路徑 檔名.副檔名 二進位制檔案 資料以二進位制形式在儲存在磁碟上。裝置檔案 輸入 輸出裝置 標準輸入檔案 鍵盤 標準輸出檔案 標準錯誤輸出檔案 顯示器 檔案型指標 c語言是通過名為fil...
C語言檔案操作
1,兩種檔案訪問方式 輸入,輸出方式 順序訪問 直接訪問 2,資料的兩種存放形式 文字檔案 二進位制檔案 3.檔案指標 定義檔案型別指標變數的一般形式 file 指標變數名 例如 file fp1,fp2 4.開啟檔案 在使用檔案之前,需開啟檔案.在c裡使用fopen函式開啟檔案.格式為 fopen...