由于最近經(jīng)常使用到c語言中的讀寫文件,所以在此總結(jié)以下,方便以后查找.
在c中,文件操作都是由庫函數(shù)來實現(xiàn)的,主要是分為讀和寫兩種操作,以下詳細講解以下所有有關(guān)文件操作的邯鄲乎的用法:
(1)fopen()函數(shù):打開文
包含頭文件:#include<stdio.h>
格式:FILE * fopen(const char * path,const char * mode);
參數(shù):
path:需要打開的文件路徑
mode:文件打開方式
r以只讀方式打開文件,該文件必須存在。
r+以可讀寫方式打開文件,該文件必須存在。
rb+讀寫打開一個二進制文件,允許讀數(shù)據(jù)。
rt+讀寫打開一個文本文件,允許讀和寫。
w打開只寫文件,若文件存在則文件長度清為0,即該文件內(nèi)容會消失。若文件不存在則建立該文件。
w+打開可讀寫文件,若文件存在則文件長度清為零,即該文件內(nèi)容會消失。若文件不存在則建立該文件。
a以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數(shù)據(jù)會被加到文件尾,即文件原先的內(nèi)容會被保留。(EOF符保留)
a+以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數(shù)據(jù)會被加到文件尾后,即文件原先的內(nèi)容會被保留。 (原來的EOF符不保留)
wb只寫打開或新建一個二進制文件;只允許寫數(shù)據(jù)。
wb+讀寫打開或建立一個二進制文件,允許讀和寫。
wt+讀寫打開或著建立一個文本文件;允許讀寫。
at+讀寫打開一個文本文件,允許讀或在文本末追加數(shù)據(jù)。
ab+讀寫打開一個二進制文件,允許讀或在文件末追加數(shù)據(jù)。
現(xiàn)在對上面的文件打開方式做個總結(jié):
文件使用方式由r,w,a,t,b,+六個字符拼成,各字符的含義是:
r(read): 讀
w(write): 寫
a(append): 追加
t(text): 文本文件,可省略不寫
b(banary): 二進制文件
+: 讀和寫
返回值
如果文件順利打開,返回指向該流的文件指針。如果文件打開失敗則返回NULL,并把錯誤代碼存在errno中。
說明
一般而言,打開文件后會作一些文件讀取或?qū)懭氲膭幼?,若打開文件失敗,接下來的讀寫動作也無法順利進行,所以一般在fopen()后作錯誤判斷及處理。
(2)fread()函數(shù)和fwrite()函數(shù):(可以用來實現(xiàn)對數(shù)據(jù)塊的操作)
1.一般調(diào)用形式
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
2.說明
(1)buffer:是一個指針,對fread來說,它是讀入數(shù)據(jù)的存放地址。對fwrite來說,是要輸出數(shù)據(jù)的地址。
(2)size:要讀寫的字節(jié)數(shù);
(3)count:要進行讀寫多少個size字節(jié)的數(shù)據(jù)項;
(4)fp:文件型指針。
C語言還提供了用于整塊數(shù)據(jù)的讀寫函數(shù)。 可用來讀寫一組數(shù)據(jù),如一個數(shù)組元素,一個結(jié)構(gòu)變量的值等。讀數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為: fread(buffer,size,count,fp); 寫數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為: fwrite(buffer,size,count,fp); 其中buffer是一個指針,在fread函數(shù)中,它表示存放輸入數(shù)據(jù)的首地址。在fwrite函數(shù)中,它表示存放輸出數(shù)據(jù)的首地址。 size 表示數(shù)據(jù)塊的字節(jié)數(shù)。count 表示要讀寫的數(shù)據(jù)塊塊數(shù)。fp 表示文件指針。
例如:fread(fa,4,5,fp); 其意義是從fp所指的文件中,每次讀4個字節(jié)(一個實數(shù))送入實數(shù)組fa中,連續(xù)讀5次,即讀5個實數(shù)到fa中。
(3)fgetc()和fputc():字符讀寫函數(shù)
fgetc函數(shù)(getc函數(shù))
(1)一般調(diào)用形式
ch=fgetc(fp);
(2)作用
從指定的文件讀入一個字符,即從fp所指向的文件中讀入一個字符賦給ch。
(3)返回值
成功:返回值所得到的字符;
失敗:返回EOF(-1)。
fputc函數(shù)():
(1)一般調(diào)用形式
fputc(ch,fp);
(2)作用
把一個字符寫到磁盤文件上去,即將字符ch輸出到fp所指向的文件中去。
(3)返回值
成功:返回值就是輸出的字符;
失?。悍祷谽OF(-1)。
說明:函數(shù)putchar()是在stdio.h中用預(yù)處理命令定義的宏,即:
#define putchar(c) fputc(c,stdout)
4、fgets()和fputs()函數(shù):讀寫字符串函數(shù)
(1)fgets():char *fgets(char *str, int num, FILE *fp)
參數(shù)說明:str: 保存從文件讀取出來的字符串
fp: 待讀文件的文件指針
num: 表示從文件中讀出的字符串不超過 n-1個字符。在讀入的最后一個字符后加上串結(jié)束標(biāo)志'\0'
(2)fputs(char * s,F(xiàn)ILE * stream);5、fscanf()和fprintf()函數(shù):格式化讀寫函數(shù)
(1)fprintf()函數(shù):輸出格式化字符串到流或者是將格式化后的字符串寫到輸出流(文件)
原型:int fprintf( FILE *stream, const char *format [, argument ]…);
例子:fprintf(fp, "%s %s %d %f", str1,str2, a, b) ;
(2)fscanf()函數(shù):輸出文件中的內(nèi)容到某個變量中。
int fscanf(FILE *stream, char *format,[argument...]);
int fscanf(文件指針,格式字符串,輸入列表); for example: FILE *fp; char a[]; int b; double c; fscanf(fp,"%s%d%lf",a,&b,&c) 返回值:整型,數(shù)值等于[argument...]的個數(shù)
6、ftell()函數(shù):得到流式文件的當(dāng)前讀寫位置,其返回值是當(dāng)前讀寫位置偏離文件頭部的字節(jié)數(shù)。
原型:long ftell(FILE *fp)
7、 fseek()函數(shù):把fp的文件讀寫位置指針移到指定的位置。
int fseek(FILE *fp,long offset,int origin);
origin指的是“起始點”,它有三個常量的值,如下:
起始點對應(yīng)的數(shù)字 代表的文件位置
SEEK_SET 0 文件開頭
SEEK_CUR 1 文件當(dāng)前位置
SEEK_END 2 文件末尾
8、 rewind()函數(shù):將文件指針重新指向一個流的開頭
原型:int rewind(FILE *stream);
例子:一般我們會通過下面的方法來獲取文件中字符的個數(shù):
FILE *fs=fopen("C:\1.txt","r");//創(chuàng)建文件流
long length=0;//聲明文件長度
fseek(fs,0,SEEK_END);//將文件內(nèi)部指針放到文件最后面
length=ftell(fs);//讀取文件指針的位置,得到文件字符的個數(shù)
rewind(fs);//將文件指針重置到文件最前面