c語言檔案操作之----檔案的讀寫
當檔案按指定的工作方式開啟以後,就可以執行對檔案的讀和寫。下面按檔案的性質分類進行操作。針對文字檔案和二進位制檔案的不同性質,對文字檔案來說,可按字元讀寫或按字串讀寫;對二進位制檔案來說,可進行成塊的讀寫或格式化的讀寫。
1. 讀寫字元
c提供fgetc和fputc函式對文字檔案進行字元的讀寫,其函式的原型存於stdio.h標頭檔案中,格式為:
顯示**列印1 int fgetc(file *stream)
fgetc( )函式從輸入流的當前位置返回乙個字元,並將檔案指標指示器移到下乙個字元處,如果已到檔案尾,函式返回eof,此時表示本次操作結束,若讀寫檔案完成,則應關閉檔案。
顯示**列印1 int fputc(int ch,file *stream)
fputc()函式完成將字元c h的值寫入所指定的流檔案的當前位置處,並將檔案指標後移一位。fputc()函式的返回值是所寫入字元的值,出錯時返回eof。
[例8-2] 將存放於磁碟的指定文字檔案按讀寫字元方式逐個地從檔案讀出,然後再將其顯示到螢幕上。採用帶引數的main( ),指定的磁碟檔名由命令列方式通過鍵盤給定。
顯示**列印01 #i nclude
main(argc,ar**)
int argc;
char *ar**;
char ch;
file *fp;
int i;
if((fp=fopen(ar**[1],"r"))==null) /* 開啟乙個由ar**[1]所指的檔案*/
printf("not open");
exit(0);
while ((ch=fgetc(fp))!=eof) /* 從檔案讀一字元,顯示到螢幕*/
putchar(ch);
fclose(fp);
程式是一帶引數的main( )函式,要求以命令列方式執行,其引數argc是用於記錄輸入引數的個數, ar**是指標陣列,用於存放輸入引數的字串,串的個數由argc描述。假設我們指定讀取的檔名為l8-2.c,並且列表檔案內容就是源程式。經過編 譯和連線生成可執行的檔案l8-2.exe。執行程式l8-2.exe,輸入的命令列方式為:
c:\tc>l8-2 l8-2.c
上述程式以命令列方式執行,其輸入引數字串有兩個,即ar**[0]="c:\tc>l8-2"、ar**[1]=" l8-2.c ",argc = 2。故開啟的檔案是l8-2.c 。程式中對fgetc( )函式的返回值不斷進行測試,若讀到檔案尾部或讀檔案出錯,都將返回c的整型常量eof,其值為非零有效整數。程式的執行輸出為源程式本身:
c:\tc>l8-2 l8-2.c
顯示**列印
#i nclude
main( argc,ar**)
int argc;
char *ar**;
char ch;
file *fp;
int i;
if((fp=fopen(ar**[1],"r"))==null) /* 開啟乙個由ar**[1] 所指的檔案*/
printf("not open");
exit(0);
while ((ch=fgetc(fp))!=eof) /* 從檔案讀一字元,顯示到螢幕*/
putchar(ch);
fclose(fp);
[例8-3] 從鍵盤輸入字元,存到磁碟檔案test.txt中:
#i nclude
顯示**列印
main( )
file fp; / *定義檔案變數指標* /
char ch;
if((fp=fopen("test.txt","w"))==null) /*以只寫方式開啟檔案*/
printf("cannot open file!\n");
exit(0);
while ((ch=fgetchar())!='\n') /*只要輸入字元非回車符* /
fputc(ch,fp) /*寫入檔案乙個字元*/
fclose(fp);
程式通過從鍵盤輸入一以回車結束的字串,寫入指定的流檔案test.txt,檔案以文字只寫方式開啟,所以流檔案具有可讀性,能支援各種字元處理工具訪問。簡單地說,我們可以通過dos提供的type命令來列表顯示檔案內容。
執行程式:
i love china!
在dos作業系統環境下,利用type 命令顯示test.txt檔案如下:
c:\tc> type test.txt
i love china!
2. 讀寫字串
c提供讀寫字串的函式原型在stdio.h標頭檔案中,其函式形式為:
顯示**列印1 char *fgets(char *str,int num,file *stream)
fgets() 函式從流檔案stream中讀取至多num-1個字元,並把它們放入str指向的字元陣列中。讀取字元直到遇見回車符或e o f(檔案結束符)為止,或讀入了所限定的字元數。
顯示**列印1 int fputs(char *str,file *stream)
fputs( )函式將str指向的字串寫入流檔案。操作成功時,函式返回0值,失敗返回非零值。
顯示**列印01 #i nclude
#i nclude
main( )
file *fp;
char str[1];
if ((fp=fopen("test.txt","w"))==null) /*開啟只寫的文字檔案*/
printf("cannot open file!");
exit(0);
while((strlen(gets(str)))!=0)
student; /*說明結構體變數*/
if((fp=fopen("test1.txt","w"))==null)
student;
if((fp1=fopen("test.txt","wb"))==null)
{ /*以二進位制只寫方式開啟檔案* /
printf("cannot open file");
exit(0);
printf("input data:\n");
for( i=0;i<2;i++)
scanf("%s %s %f %f",student.name,student.num,&student.score[0],&student.score[1]); /* 輸入一記錄*/
fwrite(&student,sizeof(student),1,fp1); /* 成塊寫入檔案*/
fclose(fp1);
if((fp1=fopen("test.txt","rb"))==null)
{ /*重新以二進位制只寫開啟檔案*/
printf("cannot open file");
exit(0);
printf("output from file:\n");
for (i=0;i<2;i++)
fread(&student,sizeof(student),1,fp1); /* 從檔案成塊讀*/
printf("%s %s %7.2f %7.2f\n",student.name,student.num,student.score[0],student.score[1]); /* 顯示到螢幕*/
fclose(fp1);
執行程式:
input data:
xiaowan j001 87.5 98.4
xiaoli j002 99.5 89.6
output from file:
xiaowan j001 87.50 98.40
xiaoli j002 99.50 89.60
通常,對於輸入資料的格式較為複雜的話,我們可採取將各種格式的資料當做字串輸入,然後將字串轉換為所需的格式。c提供函式:
顯示**列印
int atoi(char *ptr)
float atof(char *ptr)
long int atol(char *ptr)
它們分別將字串轉換為整型、實型和長整型。使用時請將其包含的標頭檔案math.h或stdlib.h寫在程式的前面。
c 之檔案操作(讀 寫檔案)
程式執行時產生的資料都屬於臨時資料,程式一旦執行結束就會被釋放,通過檔案可將資料持久化。c 中對檔案操作需要標頭檔案 文字型別分為兩種 操作檔案的三大類 1 ofstream 讀操作 2 ifstream 讀操作 3 fstream 讀寫操作寫檔案步驟 1 包含標頭檔案 include2 建立流物件...
c語言檔案讀寫操作
檔案讀取操作 file fp char fname d printf s n fname fp fopen fname,r fscanf fp,d buf printf d buf 0 fclose fp fread,與fwrite是binary stream input output二進位製流的輸...
C語言檔案讀寫操作
標頭檔案 include include include include 用於生成隨機數 建立檔案指標 file fp 檢測檔案是否開啟成功 if fp fopen f52.txt w null 如果檔案不存在,則會新建。w 即設定操作為 write 寫操作 隨機的產生,設定時間種子 srand t...