日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

c語(yǔ)言中所有文件操作函數(shù)詳解fopen、fwrite、fread、fgetc、fputc、fscanf、fprintf、ftell、fseek等函數(shù)

 rookie 2016-04-11

     由于最近經(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:需要打開的文件路徑
  mode:文件打開方式

r 以只讀方式打開文件,該文件必須存在。
r+ 以可讀寫方式打開文件,該文件必須存在。
rb+ 讀寫打開一個(gè)二進(jìn)制文件,允許讀數(shù)據(jù)。
rt+ 讀寫打開一個(gè)文本文件,允許讀和寫。
w 打開只寫文件,若文件存在則文件長(zhǎng)度清為0,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。
w+ 打開可讀寫文件,若文件存在則文件長(zhǎng)度清為零,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾,即文件原先的內(nèi)容會(huì)被保留。(EOF符保留)
a+ 以附加方式打開可讀寫的文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾后,即文件原先的內(nèi)容會(huì)被保留。 (原來(lái)的EOF符不保留)
wb 只寫打開或新建一個(gè)二進(jìn)制文件;只允許寫數(shù)據(jù)。
wb+ 讀寫打開或建立一個(gè)二進(jìn)制文件,允許讀和寫。
wt+ 讀寫打開或著建立一個(gè)文本文件;允許讀寫。
at+ 讀寫打開一個(gè)文本文件,允許讀或在文本末追加數(shù)據(jù)。
ab+ 讀寫打開一個(gè)二進(jìn)制文件,允許讀或在文件末追加數(shù)據(jù)。

現(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ù))
 (1)一般調(diào)用形式
        ch=fgetc(fp);
(2)作用
        從指定的文件讀入一個(gè)字符,即從fp所指向的文件中讀入一個(gè)字符賦給ch。
(3)返回值
        成功:返回值所得到的字符;
        失?。悍祷谽OF(-1)。

fputc函數(shù)():

(1)一般調(diào)用形式
 fputc(ch,fp);
(2)作用
把一個(gè)字符寫到磁盤文件上去,即將字符ch輸出到fp所指向的文件中去。
(3)返回值
成功:返回值就是輸出的字符;
失?。悍祷谽OF(-1)。
說(shuō)明:函數(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ù)說(shuō)明:str: 保存從文件讀取出來(lái)的字符串       

         fp: 待讀文件的文件指針

         num: 表示從文件中讀出的字符串不超過(guò) n-1個(gè)字符。在讀入的最后一個(gè)字符后加上串結(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)容到某個(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);//將文件指針重置到文件最前面

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多