C++中的文件操作主要有兩種:將程序中的字符寫入到文件,以及將文件中的文本讀取到程序。
一、向文件中寫入文本(...->fp):
1.int fPRints(FILE *fp, const char *format,...):
fprintf()會(huì)根據(jù)參數(shù)format字符串來(lái)轉(zhuǎn)換并格式化數(shù)據(jù),然后將結(jié)果輸出到參數(shù)fp指定的文件中, 直到出現(xiàn)字符串結(jié)束('/0')為止,數(shù)字不會(huì)亂碼(%f...%d...)。
fprintf()的返回值是輸出的字符數(shù),發(fā)生錯(cuò)誤時(shí)返回一個(gè)負(fù)值,即返回EOF(符號(hào)常量,其值為-1)。
(關(guān)于fprintf()和fscanf()的一個(gè)小demo的下載地址(零分下載):點(diǎn)擊打開鏈接)
2.int fputc(char c, FILE *fp):
將字符ch寫到文件指針fp所指向的文件的當(dāng)前寫指針的位置,即ch->fp。
注意fputc()是一個(gè)字符一個(gè)字符的寫,因此如果是一個(gè)char*,可以這樣寫入到文件中:
#include <stdio.h>#include <stdlib.h>#include <string.h>void main(){ FILE *fp; char *s = "test"; if ((fp = fopen("file.txt", "w")) == NULL) { printf("Error!/n"); exit(1); } for(int i = 0; i < strlen(s); i++) fputc(s[i], fp); fclose(fp);}3.int fputs(char *str, FILE *fp):
向指定的文件寫入一個(gè)字符串(不自動(dòng)寫入字符串結(jié)束標(biāo)記符‘/0’),成功寫入一個(gè)字符串后,文件的位置指針會(huì)自動(dòng)后移,函數(shù)返回值為非負(fù)整數(shù);否則返回EOF(符號(hào)常量,其值為-1),即string->fp。注意fputs()是一個(gè)字符串直接寫入到文件中,因此使用時(shí)直接寫入字符串即可,如下:
#include <stdio.h>#include <stdlib.h>#include <string.h>void main(){ FILE *fp; char *s = "test"; if ((fp = fopen("file.txt", "w")) == NULL) { printf("Error!/n"); exit(1); } fputs(s, fp); fclose(fp);}二、從文件中讀取文本(fp->...):
1.int fscanf(FILE *fp, const char *format,...):
根據(jù)數(shù)據(jù)格式format從輸入流(stream)中寫入數(shù)據(jù)(argument);與fgets的差別在于:fscanf遇到空格和換行時(shí)結(jié)束,注意空格時(shí)也結(jié)束,fgets遇到空格不結(jié)束。
(關(guān)于fprintf()和fscanf()的一個(gè)小demo的下載地址(零分下載):點(diǎn)擊打開鏈接)
2.int fgetc(FILE *fp):
意為從文件指針stream指向的文件中讀取一個(gè)字符,讀取一個(gè)字節(jié)后,光標(biāo)位置后移一個(gè)字節(jié),即fp->ch。
#include <stdio.h>#include <stdlib.h>#include <string.h> #include <iostream>void main(void){ FILE *fp; char ch; if ((fp = fopen("file.txt", "w+")) == NULL) { printf("Error!/n"); exit(1); } while (ch != EOF){ ch = fgetc(fp); std::cout << ch << std::endl; } while (ch != EOF); fclose(fp);}3. char *fgets(char *buf, int bufsize, FILE*fp):
從文件中讀取數(shù)據(jù),每次讀取一行,讀取的數(shù)據(jù)保存在buf指向的字符數(shù)組中,每次最多讀取bufsize-1個(gè)字符(第bufsize個(gè)字符賦'/0'),如果文件中的該行,不足bufsize個(gè)字符,則讀完該行就結(jié)束,即fp->string。如若該行(包括最后一個(gè)換行符)的字符數(shù)超過(guò)bufsize-1,則fgets只返回一個(gè)不完整的行,但是,緩沖區(qū)總是以NULL字符結(jié)尾,對(duì)fgets的下一次調(diào)用會(huì)繼續(xù)讀該行。函數(shù)成功將返回buf,失敗或讀到文件結(jié)尾返回NULL。因此不能直接通過(guò)fgets的返回值來(lái)判斷函數(shù)是否是出錯(cuò)而終止的,應(yīng)該借助feof函數(shù)或者ferror函數(shù)來(lái)判斷。
返回參數(shù):成功,則返回第一個(gè)參數(shù)buf,如果發(fā)生讀入錯(cuò)誤,error指示器被設(shè)置,返回NULL,buf的值可能被改變。
#include <stdio.h>#include <stdlib.h>#include <string.h> #include <iostream>void main(void){ FILE *fp; char str[] = "test"; char buf[20]; if ((fp = fopen("file.txt", "w+")) == NULL) { printf("Error!/n"); exit(1); } fgets(buf, strlen(str) + 1, fp); fclose(fp);}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注