C-文件讀寫

C 標準庫 – | 菜鳥教程

1. 打開文件

可以使用?fopen( )?函數(shù)來創(chuàng)建一個新的文件或者打開一個已有的文件今妄,這個調(diào)用會初始化類型?FILE?的一個對象,類型?FILE?包含了所有用來控制流的必要的信息竿屹。下面是這個函數(shù)調(diào)用的原型:

FILE *fopen( const char * filename, const char * mode );

filename:

? ? 字符串,文件名

模式描述

r ? ?:打開一個已有的文本文件惫撰,允許讀取文件羔沙。

w ? ?:打開一個文本文件,允許寫入文件厨钻。如果文件不存在扼雏,則會創(chuàng)建一個新文件。在這里夯膀,您的程序會從文件的開頭寫入內(nèi)容诗充。如果文件存在,則該會被截斷為零長度诱建,重新寫入蝴蜓。

a ? ?:打開一個文本文件,以追加模式寫入文件俺猿。如果文件不存在茎匠,則會創(chuàng)建一個新文件。在已有的文件內(nèi)容中追加內(nèi)容押袍。

r+ ? :打開一個文本文件诵冒,允許讀寫文件。

w+ ? ?:打開一個文本文件谊惭,允許讀寫文件汽馋。如果文件已存在,則文件會被截斷為零長度圈盔,如果文件不存在豹芯,則會創(chuàng)建一個新文件。

a+ ? ?:打開一個文本文件驱敲,允許讀寫文件铁蹈。如果文件不存在,則會創(chuàng)建一個新文件众眨。讀取會從文件的開頭開始木缝,寫入則只能是追加模式便锨。

如果處理的是二進制文件,則需使用下面的訪問模式來取代上面的訪問模式:

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

2. 關(guān)閉文件

int fclose( FILE *fp ); // 關(guān)閉流stream我碟,刷新所有的緩沖區(qū)

如果成功關(guān)閉文件放案,fclose( )?函數(shù)返回零,如果關(guān)閉文件時發(fā)生錯誤矫俺,函數(shù)返回?EOF吱殉。

3. 寫入文件

int fputc( int c, FILE *fp ); // 成功返回寫入字符,失敗返回EOF

int fputs( const char *s, FILE *fp ); ?//成功返回非負值厘托,失敗返回EOF

int fprintf(FILE *fp,const char *format, ...) ?;

size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file); // 二進制的書寫

FILE * fp;?

fp = fopen ("file.txt", "w+");?

fprintf(fp, "%s %s %s %d", "We", "are", "in", 2014);

?fclose(fp);

4. 讀取文件

int fgetc( FILE * fp ); //正確返回讀取的字符友雳,錯誤返回EOF

char *fgets( char *buf, int n, FILE *fp ); ?

函數(shù)?fgets()?從 fp 指向的輸入流中讀取 n - 1 個字符。復制到緩沖區(qū)?buf铅匹,并在最后追加一個?null?字符來終止字符串押赊。

int fscanf(FILE *fp, const char *format, ...) ?;

?函數(shù)來從文件中讀取字符串包斑,但是在遇到第一個空格字符時流礁,它會停止讀取。

size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file); // 二進制的讀取罗丰,常用于存儲塊的讀取

5. fseek

int fseek(FILE *stream, long offset, int whence);

fseek 設(shè)置當前讀寫點到 offset 處, whence 可以是?

SEEK_SET

SEEK_CUR

SEEK_END 這些值決定是從文件頭神帅、當前點和文件尾計算偏移量 offset。

你可以定義一個文件指針?FILE *fp,當你打開一個文件時萌抵,文件指針指向開頭找御,你要指到多少個字節(jié),只要控制偏移量就好绍填,例如, 相對當前位置往后移動一個字節(jié):fseek(fp,1,SEEK_CUR);?中間的值就是偏移量霎桅。 如果你要往前移動一個字節(jié),直接改為負值就可以:fseek(fp,-1,SEEK_CUR)讨永。

只有用?r+?模式打開文件才能插入內(nèi)容滔驶,w?或?w+?模式都會清空掉原來文件的內(nèi)容再來寫a?或?a+?模式即總會在文件最尾添加內(nèi)容住闯,哪怕用 fseek() 移動了文件指針位置。

6. ftell

long int ftell(FILE *stream)

返回給定流 stream 的當前文件位置澳淑。

FILE *fp;

? int len;

? fp = fopen("file.txt", "r");

? if( fp == NULL ){

? ? ? perror ("打開文件錯誤");

? ? ? return(-1);

? }

? fseek(fp, 0, SEEK_END);

? len = ftell(fp);

? fclose(fp);

? printf("file.txt 的總大小 = %d 字節(jié)\n", len);

? return(0);

7. rewind

void rewind(FILE *stream)

設(shè)置文件位置為給定流 stream 的文件的開頭比原。

8. feof

int feof(FILE *stream)?

測試給定流 stream 的文件結(jié)束標識符。?

fp = fopen("file.txt","r");

?while(1){?

? ???c = fgetc(fp);?

? ???if( feof(fp) )?

?? ??????break ;?

? ???printf("%c", c);

?} fclose(fp);

9. fflush

int fflush(FILE *stream)

刷新流 stream 的輸出緩沖區(qū)杠巡。

10. fgetpos

int fgetpos(FILE *stream, fpos_t *pos)

獲取流 stream 的當前文件位置量窘,并把它寫入到 pos。

11. fsetpos

int fsetpos(FILE *stream, const fpos_t *pos)

設(shè)置給定流 stream 的文件位置為給定的位置氢拥。參數(shù)?pos?是由函數(shù) fgetpos 給定的位置蚌铜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锨侯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子冬殃,更是在濱河造成了極大的恐慌囚痴,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件审葬,死亡現(xiàn)場離奇詭異深滚,居然都是意外死亡,警方通過查閱死者的電腦和手機涣觉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門痴荐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人官册,你說我怎么就攤上這事生兆。” “怎么了膝宁?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵鸦难,是天一觀的道長。 經(jīng)常有香客問我昆汹,道長明刷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任满粗,我火速辦了婚禮辈末,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘映皆。我一直安慰自己挤聘,他們只是感情好,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布捅彻。 她就那樣靜靜地躺著组去,像睡著了一般。 火紅的嫁衣襯著肌膚如雪步淹。 梳的紋絲不亂的頭發(fā)上从隆,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音缭裆,去河邊找鬼键闺。 笑死,一個胖子當著我的面吹牛澈驼,可吹牛的內(nèi)容都是我干的辛燥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挎塌!你這毒婦竟也來了徘六?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤榴都,失蹤者是張志新(化名)和其女友劉穎待锈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缭贡,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡炉擅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了阳惹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谍失。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖莹汤,靈堂內(nèi)的尸體忽然破棺而出快鱼,到底是詐尸還是另有隱情,我是刑警寧澤纲岭,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布抹竹,位于F島的核電站,受9級特大地震影響止潮,放射性物質(zhì)發(fā)生泄漏窃判。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一喇闸、第九天 我趴在偏房一處隱蔽的房頂上張望袄琳。 院中可真熱鬧,春花似錦燃乍、人聲如沸唆樊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逗旁。三九已至,卻和暖如春舆瘪,著一層夾襖步出監(jiān)牢的瞬間片效,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工英古, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留淀衣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓哺呜,卻偏偏與公主長得像舌缤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子某残,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容