c語言把磁碟檔案看成是字元(或位元組)的序列,按照儲存資訊的形式來說,檔案主要是有文字檔案和二進位制檔案。文字檔案由乙個個字元組成,每個位元組存放乙個ascii碼制,代表乙個字元。二進位制檔案把記憶體中的資料按其在記憶體中的儲存形式原樣放入磁碟空間。
二進位制檔案以及文字檔案都可以看做是「資料流」。
流檔案的特點是,處理時不需考慮檔案中的資料的性質、型別和存放格式。訪問時只是以位元組為單位對資料進行訪問,沒有記錄的概念,而將對資料結構的分析、處理等工作都交給後續程式區處理。系統會自動為這在使用的每個檔案開闢乙個快取區,從記憶體向磁碟輸出資料必須先送到記憶體中的快取區,裝滿快取後才一起送到磁碟。
一、檔案的開啟與關閉
檔案在進行讀寫操作之前要先開啟,使用完畢要關閉。所謂開啟檔案,實際上是建立檔案的各種有關資訊,並使檔案指標指向該檔案,以便進行其它操作。關閉檔案則斷開指標與檔案之間的聯絡,也就禁止再對該檔案進行操作。
fopen函式用來開啟乙個檔案,其呼叫的一般形式為:
檔案指標名=fopen(檔名,使用檔案方式);
其中:「檔案指標名」必須是被說明為file 型別的指標變數;
「檔名」是被開啟檔案的檔名;
「使用檔案方式」是指檔案的型別和操作要求。
「檔名」是字串常量或字串陣列。
使用檔案的方式共有12種,下面給出了它們的符號和意義。
「r」唯讀開啟乙個文字檔案,只允許讀資料
「w」只寫開啟或建立乙個文字檔案,只允許寫資料
「a」追加開啟乙個文字檔案,並在檔案末尾寫資料
「rb」
唯讀開啟乙個二進位制檔案,只允許讀資料
「wb」
只寫開啟或建立乙個二進位制檔案,只允許寫資料
「ab」
追加開啟乙個二進位制檔案,並在檔案末尾寫資料
「r+」
讀寫開啟乙個文字檔案,允許讀和寫
「w+」
讀寫開啟或建立乙個文字檔案,允許讀寫
「a+」
讀寫開啟乙個文字檔案,允許讀,或在檔案末追加資料
「rb+」
讀寫開啟乙個二進位制檔案,允許讀和寫
「wb+」
讀寫開啟或建立乙個二進位制檔案,允許讀和寫
「ab+」
讀寫開啟乙個二進位制檔案,允許讀,或在檔案末追加資料
二、檔案的讀寫
對檔案的讀和寫是最常用的檔案操作。在c語言中提供了多種檔案讀寫的函式:
·字元讀寫函式 :fgetc和fputc
·字串讀寫函式:fgets和fputs
·資料塊讀寫函式:freed和fwrite
·格式化讀寫函式:fscanf和fprinf
下面分別予以介紹。使用以上函式都要求包含標頭檔案stdio.h。
(1)字元讀寫函式 :fgetc和fputc
·fgetc函式的功能是從指定的檔案中讀乙個字元,函式呼叫的形式為:
字元變數=fgetc(檔案指標);
對於fgetc函式的使用有以下幾點說明:
1) 在fgetc函式呼叫中,讀取的檔案必須是以讀或讀寫方式開啟的。
2) 讀取字元的結果也可以不向字元變數賦值, 例如: fgetc(fp); 但是讀出的字元不能儲存。
3) 在檔案內部有乙個位置指標。用來指向檔案的當前讀寫位元組。在檔案開啟時,該指標總是指向檔案的第乙個位元組。使用fgetc 函式後,該位置指標將向後移動乙個位元組。因此可連續多次使用fgetc函式,讀取多個字元。應注意檔案指標和檔案內部的位置指標不是一回事。檔案指標是指向整個檔案的,須在程式中定義說明,只要不重新賦值,檔案指標的值是不變的。檔案內部的位置指標用以指示檔案內部的當前讀寫位置,每讀寫一次,該指標均向後移動,它不需在程式中定義說明,而是由系統自動設定的。
·fputc函式的功能為向指定的檔案中寫入乙個字元,函式呼叫的形式為:
fputc(字元量,檔案指量或變數),
例如:fputc('a',fp);
其意putc函式的使用也要說明幾點:
1) 被寫入的檔案可以用寫、讀寫、追加方式開啟,用寫或讀寫方式寫入字元從檔案首開始。如需保留原有檔案內容,希望寫入的字元被寫入的檔案若不存在,則建立該檔案。
2) 每寫入乙個字元,檔案內部位置指標向後移動乙個位元組。
3) fputc函式有乙個返回值,如寫入成功則返回寫入的字元,否則返回乙個eof。可用此來判斷寫符,寫入乙個檔案,再把該檔案內容讀出顯示在螢幕上。
【示例程式】
#include
#include
#define maxlen 1024
main()
if(null == fpw)
printf("both file open successd!\n");
while((ch = fgetc(fpr)) != eof)
while((ch = fgetc(fpw)) != eof)
fclose(fpw);
fclose(fpr);
exit(0);
}(2) 字串讀寫函式:fgets和fputs
·fgets函式的功能是從指定的檔案中讀乙個字串到字元陣列中,函式呼叫的形式為:
fgets(字元陣列名,n,檔案指標);
其中的n是乙個正整數。表示從檔案中讀出的字串不超過 n-1個字元。在讀入的最後乙個字元後加上串結束標誌'\0'。
例如:fgets(str,n,fp);的意義是從fp所指的檔案中讀出n-1個字元送入字元陣列str中。
對fgets函式有兩點說明:
1). 在讀出n-1個字元之前,如遇到了換行符或eof,則讀出結束。
2). fgets函式也有返回值,其返回值是字元陣列的首位址。
·fputs函式的功能是向指定的檔案寫入乙個字串,其呼叫形式為:
fputs(字串,檔案指標) 其中字串可以是字串常量,也可以是字元陣列名 或 指標變數,
例如:fputs(「abcd「,fp);其意義是把字串「abcd」寫入fp所指的檔案之中。
【程式示例】
#include
#include
main()
if(null == fpw)
printf("file open successed!\n");
fgets(str,11,fpr);
printf("%s\n",str);
fputs(str,fpw);
fclose(fpr);
fclose(fpw);
exit(0);
}(3)資料塊讀寫函式:fread和fwrite
c語言還提供了用於整塊資料的讀寫函式。 可用來讀寫一組資料,如乙個陣列元素,乙個結構變數的值等。
·讀資料塊函式fread呼叫的一般形式為: fread(buffer,size,count,fp);
·寫資料塊函式fwrite呼叫的一般形式為: fwrite(buffer,size,count,fp);
其中buffer是乙個指標,在fread函式中,它表示存放輸入資料的首位址。在fwrite函式中,它表示存放輸出資料的首位址。 size 表示資料塊的位元組數。count 表示要讀寫的資料塊塊數。fp 表示檔案指標。
【程式示例】
#include
#include
#define maxsize 2
struct stuboy[maxsize];
main()
printf("file open successed!\n");
printf("input data: ");
for(i = 0;i < maxsize;i++)
for(i = 0;i < maxsize;i++)
fwrite(boy,sizeof(struct stu),maxsize,fp);
rewind(fp);
fread(rboy,sizeof(struct stu),maxsize,fp);
for(i = 0;i < maxsize;i++)
fclose(fp);
exit(0);
}(4)格式化讀寫函式:fscanf和fprinf
fscanf函式,fprintf函式與scanf和printf 函式的功能相似,都是格式化讀寫函式。 兩者的區別在於 fscanf 函式和fprintf函式的讀寫物件不是鍵盤和顯示器,而是磁碟檔案。
這兩個函式的呼叫格式為:
·fscanf(檔案指標,格式字串,輸入表列);
·fprintf(檔案指標,格式字串,輸出表列);
例如:fscanf(fp,"%d%s",&i,s);
fprintf(fp,"%d%c",j,ch);
【示例程式】
#include
#include
#define maxsize 2
struct stuboy[maxsize];
main()
printf("enter data:\n");
for(i = 0;i < maxsize;i++)
for(i = 0;i < maxsize;i++)
for(i = i;i < maxsize;i++)
fclose(fp);
exit(0);
}
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...
C語言 檔案讀寫操作
一 基本概念 1 檔案流 c 語言把檔案看作是乙個字元的序列,即檔案是由乙個乙個字元組成的字元流,因此 c 語言將檔案也稱之為檔案流。即當讀寫乙個檔案時,可以不必關心檔案的格式或結構。計算機檔案的儲存,物理上都是二進位制,所以文字檔案與二進位制檔案的區別並不是物理上的,而是邏輯上的。這兩者只是在編碼...