由於最近經常使用到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);//將文件指針重置到文件最前面