文件讀寫

文件操作的讀取常用的是打開、關閉文件,向文件中存入數(shù)據(jù),讀取文件中的數(shù)據(jù)。我這次用的是c語言中的FILE來進行的操作,一般會用到的函數(shù)也就是我下面列出來的幾種,fopen(打開文件),fclose(關閉文件),feof(判斷是否已經(jīng)到文件結尾),fgetc/fgets(從文件中獲取字符/字符串),fputc/fputs(向文件中寫入字符/字符串),fseek(設置讀/寫的位置)。

首先是頭文件

包含#include<stdio.h>

fopen(打開文件)

FILE * fopen(const char * path,const char * mode);
函數(shù)說明 參數(shù)path字符串為要打開的文件路徑及文件名,參數(shù)mode字符串則代表著流形態(tài)。
mode有下列幾種形態(tài)字符串:

  • r 打開只讀文件,該文件必須存在。
  • r+ 打開可讀寫的文件,該文件必須存在。
  • w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
  • w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
  • a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數(shù)據(jù)會被加到文件尾,即文件原先的內容會被保留。
  • a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數(shù)據(jù)會被加到文件尾后,即文件原先的內容會被保留。
feof(檢查文件流是否讀到了文件尾)

int feof(FILE * stream);
函數(shù)說明 feof()用來偵測是否讀取到了文件尾,尾數(shù)stream為fopen()所返回之文件指針。如果已到文件尾則返回非零值,其他情況返回0。

fclose(關閉文件)

int fclose(FILE * stream);
函數(shù)說明 fclose()用來關閉先前fopen()打開的文件。此動作會讓緩沖區(qū)內的數(shù)據(jù)寫入文件中,并釋放系統(tǒng)所提供的文件資源。若關閉文件動作成功則返回0,有錯誤發(fā)生時則返回EOF并把錯誤代碼存到errno。錯誤代碼 EBADF表示參數(shù)stream非已打開的文件。

fgetc(由文件中讀取一個字符)

int fgetc(FILE * stream);
函數(shù)說明 fgetc()從參數(shù)stream所指的文件中讀取一個字符。若讀到文件尾而無數(shù)據(jù)時便返回EOF。返回值 getc()會返回讀取到的字符,若返回EOF則表示到了文件尾。

fgets(由文件中讀取一字符串)
本來想用這個方法,但是它在使用的時候一直報錯,所以換了fgetc。

char * fgets(char * s,int size,FILE * stream);
函數(shù)說明 fgets()用來從參數(shù)stream所指的文件內讀入字符并存到參數(shù)s所指的內存空間,直到出現(xiàn)換行字符、讀到文件尾或是已讀了size-1個字符為止,最后會加上NULL作為字符串結束。gets()若成功則返回s指針,返回NULL則表示有錯誤發(fā)生。

fputc(將一指定字符寫入文件流中)

int fputc(int c,FILE * stream);
函數(shù)說明 fputc 會將參數(shù)c 轉為unsigned char 后寫入?yún)?shù)stream 指定的文件中。fputc()會返回寫入成功的字符,即參數(shù)c。若返回EOF則代表寫入失敗。

fputs(將一指定的字符串寫入文件內)

int fputs(const char * s,FILE * stream);
函數(shù)說明 fputs()用來將參數(shù)s所指的字符串寫入到參數(shù)stream所指的文件內。若成功則返回寫出的字符個數(shù),返回EOF則表示有錯誤發(fā)生。

fseek(移動文件流的讀寫位置)

int fseek(FILE * stream,long offset,int whence);
函數(shù)說明 fseek()用來移動文件流的讀寫位置。參數(shù)stream為已打開的文件指針,參數(shù)offset為根據(jù)參數(shù)whence來移動讀寫位置的位移數(shù)。
參數(shù) whence為下列其中一種:

  • SEEK_SET從距文件開頭offset位移量為新的讀寫位置。SEEK_CUR 以目前的讀寫位置往后增加offset個位移量。
  • SEEK_END將讀寫位置指向文件尾后再增加offset個位移量。
    當whence值為SEEK_CUR 或SEEK_END時,參數(shù)offset允許負值的出現(xiàn)。

下列是較特別的使用方式:

  • 欲將讀寫位置移動到文件開頭時:fseek(FILE *stream,0,SEEK_SET);
  • 欲將讀寫位置移動到文件尾時:fseek(FILE *stream,0,0SEEK_END);

返回值 當調用成功時則返回0,若有錯誤則返回-1,errno會存放錯誤代碼。
附加說明 fseek()不像lseek()會返回讀寫位置,因此必須使用ftell()來取得目前讀寫的位置。

ftell(取得文件流的讀取位置)

long ftell(FILE * stream);
函數(shù)說明 ftell()用來取得文件流目前的讀寫位置。參數(shù)stream為已打開的文件指針。
返回值 當調用成功時則返回目前的讀寫位置,若有錯誤則返回-1,errno會存放錯誤代碼。錯誤代碼 EBADF 參數(shù)stream無效或可移動讀寫位置的文件流。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容