程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> c語言中所有文件操作函數詳解fopen、fwrite、fread、fgetc、fputc、fscanf、fprintf、ftell、fseek等函數

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

編輯:關於C

 由於最近經常使用到c語言中的讀寫文件,所以在此總結以下,方便以後查找.

    在c中,文件操作都是由庫函數來實現的,主要是分為讀和寫兩種操作,以下詳細講解以下所有有關文件操作的邯鄲乎的用法:

(1)fopen()函數:打開文

包含頭文件:#include<stdio.h>

格式:FILE * fopen(const char * path,const char * mode);

參數:

 path:需要打開的文件路徑
  mode:文件打開方式
r  以只讀方式打開文件,該文件必須存在。
r+  以可讀寫方式打開文件,該文件必須存在。
rb+  讀寫打開一個二進制文件,允許讀數據。
rt+  讀寫打開一個文本文件,允許讀和寫。
w  打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+  打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a  以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
a+  以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。 (原來的EOF符不保留)
wb  只寫打開或新建一個二進制文件;只允許寫數據。
wb+  讀寫打開或建立一個二進制文件,允許讀和寫。
wt+  讀寫打開或著建立一個文本文件;允許讀寫。
at+  讀寫打開一個文本文件,允許讀或在文本末追加數據。
ab+  讀寫打開一個二進制文件,允許讀或在文件末追加數據。
現在對上面的文件打開方式做個總結:
文件使用方式由r,w,a,t,b,+六個字符拼成,各字符的含義是:
    r(read): 讀
    w(write): 寫
    a(append): 追加
    t(text): 文本文件,可省略不寫
    b(banary): 二進制文件
    +: 讀和寫
返回值
    如果文件順利打開,返回指向該流的文件指針。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno中。
說明
    一般而言,打開文件後會作一些文件讀取或寫入的動作,若打開文件失敗,接下來的讀寫動作也無法順利進行,所以一般在fopen()後作錯誤判斷及處理。
(2)fread()函數和fwrite()函數:(可以用來實現對數據塊的操作)
1.一般調用形式

  fread(buffer,size,count,fp);

  fwrite(buffer,size,count,fp);

2.說明

  (1)buffer:是一個指針,對fread來說,它是讀入數據的存放地址。對fwrite來說,是要輸出數據的地址。

  (2)size:要讀寫的字節數;

  (3)count:要進行讀寫多少個size字節的數據項;

  (4)fp:文件型指針。

C語言還提供了用於整塊數據的讀寫函數。 可用來讀寫一組數據,如一個數組元素,一個結構變量的值等。讀數據塊函數調用的一般形式為: fread(buffer,size,count,fp); 寫數據塊函數調用的一般形式為: fwrite(buffer,size,count,fp); 其中buffer是一個指針,在fread函數中,它表示存放輸入數據的首地址。在fwrite函數中,它表示存放輸出數據的首地址。 size 表示數據塊的字節數。count 表示要讀寫的數據塊塊數。fp 表示文件指針。

例如:fread(fa,4,5,fp); 其意義是從fp所指的文件中,每次讀4個字節(一個實數)送入實數組fa中,連續讀5次,即讀5個實數到fa中。

(3)fgetc()和fputc():字符讀寫函數

fgetc函數(getc函數)
 (1)一般調用形式
        ch=fgetc(fp);
(2)作用
        從指定的文件讀入一個字符,即從fp所指向的文件中讀入一個字符賦給ch。
(3)返回值
        成功:返回值所得到的字符;
        失敗:返回EOF(-1)。

fputc函數():

(1)一般調用形式
 fputc(ch,fp);
(2)作用
把一個字符寫到磁盤文件上去,即將字符ch輸出到fp所指向的文件中去。
(3)返回值
成功:返回值就是輸出的字符;
失敗:返回EOF(-1)。
說明:函數putchar()是在stdio.h中用預處理命令定義的宏,即:
#define putchar(c)     fputc(c,stdout)

4、fgets()和fputs()函數:讀寫字符串函數

(1)fgets():char *fgets(char *str, int num, FILE *fp)

參數說明:str: 保存從文件讀取出來的字符串      

         fp: 待讀文件的文件指針

         num: 表示從文件中讀出的字符串不超過 n-1個字符。在讀入的最後一個字符後加上串結束標志'\0'

 

(2)fputs(char * s,FILE * stream);
5、fscanf()和fprintf()函數:格式化讀寫函數

(1)fprintf()函數:輸出格式化字符串到流或者是將格式化後的字符串寫到輸出流(文件)

原型:int fprintf( FILE *stream, const char *format [, argument ]…);

例子:fprintf(fp, "%s %s %d %f", str1,str2, a, b) ;

(2)fscanf()函數:輸出文件中的內容到某個變量中。

6、ftell()函數:得到流式文件的當前讀寫位置,其返回值是當前讀寫位置偏離文件頭部的字節數。

原型:long ftell(FILE *fp)

7、 fseek()函數:把fp的文件讀寫位置指針移到指定的位置。


int fseek(FILE *fp,long offset,int origin);
origin指的是“起始點”,它有三個常量的值,如下:
起始點對應的數字   代表的文件位置
SEEK_SET 0   文件開頭
SEEK_CUR 1   文件當前位置
SEEK_END 2   文件末尾
8、 rewind()函數:將文件指針重新指向一個流的開頭
原型:int rewind(FILE *stream);
例子:一般我們會通過下面的方法來獲取文件中字符的個數:
    FILE *fs=fopen("C:\1.txt","r");//創建文件流
    long length=0;//聲明文件長度
    fseek(fs,0,SEEK_END);//將文件內部指針放到文件最後面
    length=ftell(fs);//讀取文件指針的位置,得到文件字符的個數
    rewind(fs);//將文件指針重置到文件最前面


作者:liangxanhai
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved