由于最近經(jīng)常使用到c語(yǔ)言中的讀寫文件,所以在此總結(jié)以下,方便以后查找. 在c中,文件操作都是由庫(kù)函數(shù)來(lái)實(shí)現(xiàn)的,主要是分為讀和寫兩種操作,以下詳細(xì)講解以下所有有關(guān)文件操作的邯鄲乎的用法: (1)fopen()函數(shù):打開文 包含頭文件:#include<stdio.h> 格式:FILE * fopen(const char * path,const char * mode); 參數(shù):
path:需要打開的文件路徑
現(xiàn)在對(duì)上面的文件打開方式做個(gè)總結(jié): 文件使用方式由r,w,a,t,b,+六個(gè)字符拼成,各字符的含義是: r(read): 讀 w(write): 寫 a(append): 追加 t(text): 文本文件,可省略不寫 b(banary): 二進(jìn)制文件 +: 讀和寫
返回值
如果文件順利打開,返回指向該流的文件指針。如果文件打開失敗則返回NULL,并把錯(cuò)誤代碼存在errno中。
說(shuō)明
一般而言,打開文件后會(huì)作一些文件讀取或?qū)懭氲膭?dòng)作,若打開文件失敗,接下來(lái)的讀寫動(dòng)作也無(wú)法順利進(jìn)行,所以一般在fopen()后作錯(cuò)誤判斷及處理。 (2)fread()函數(shù)和fwrite()函數(shù):(可以用來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)塊的操作)
1.一般調(diào)用形式 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 2.說(shuō)明 (1)buffer:是一個(gè)指針,對(duì)fread來(lái)說(shuō),它是讀入數(shù)據(jù)的存放地址。對(duì)fwrite來(lái)說(shuō),是要輸出數(shù)據(jù)的地址。 (2)size:要讀寫的字節(jié)數(shù); (3)count:要進(jìn)行讀寫多少個(gè)size字節(jié)的數(shù)據(jù)項(xiàng); (4)fp:文件型指針。 C語(yǔ)言還提供了用于整塊數(shù)據(jù)的讀寫函數(shù)。 可用來(lái)讀寫一組數(shù)據(jù),如一個(gè)數(shù)組元素,一個(gè)結(jié)構(gòu)變量的值等。讀數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為: fread(buffer,size,count,fp); 寫數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為: fwrite(buffer,size,count,fp); 其中buffer是一個(gè)指針,在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個(gè)字節(jié)(一個(gè)實(shí)數(shù))送入實(shí)數(shù)組fa中,連續(xù)讀5次,即讀5個(gè)實(shí)數(shù)到fa中。 (3)fgetc()和fputc():字符讀寫函數(shù) fgetc函數(shù)(getc函數(shù)) fputc函數(shù)(): (1)一般調(diào)用形式 4、fgets()和fputs()函數(shù):讀寫字符串函數(shù) (1)fgets():char *fgets(char *str, int num, FILE *fp) 參數(shù)說(shuō)明:str: 保存從文件讀取出來(lái)的字符串 fp: 待讀文件的文件指針 num: 表示從文件中讀出的字符串不超過(guò) n-1個(gè)字符。在讀入的最后一個(gè)字符后加上串結(jié)束標(biāo)志'\0'
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)容到某個(gè)變量中。 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...]的個(gè)數(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指的是“起始點(diǎn)”,它有三個(gè)常量的值,如下: 起始點(diǎn)對(duì)應(yīng)的數(shù)字 代表的文件位置 SEEK_SET 0 文件開頭 SEEK_CUR 1 文件當(dāng)前位置 SEEK_END 2 文件末尾 8、 rewind()函數(shù):將文件指針重新指向一個(gè)流的開頭
原型:int rewind(FILE *stream); 例子:一般我們會(huì)通過(guò)下面的方法來(lái)獲取文件中字符的個(gè)數(shù): FILE *fs=fopen("C:\1.txt","r");//創(chuàng)建文件流 long length=0;//聲明文件長(zhǎng)度 fseek(fs,0,SEEK_END);//將文件內(nèi)部指針?lè)诺轿募詈竺?/span> length=ftell(fs);//讀取文件指針的位置,得到文件字符的個(gè)數(shù) rewind(fs);//將文件指針重置到文件最前面 |
|
來(lái)自: rookie > 《技術(shù)帖》