c++文件讀寫(xiě)2009-06-15 15:06
1.fopen()
fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen實(shí)現(xiàn)三個(gè)功能:為使用而打開(kāi)一個(gè)流,把一個(gè)文件和此流相連接,給此流返回一個(gè)FILR指針。
參數(shù)filename指向要打開(kāi)的文件名,mode表示打開(kāi)狀態(tài)的字符串,其取值如下:
字符串 含義
"r" 以只讀方式打開(kāi)文件
"w" 以只寫(xiě)方式打開(kāi)文件
"a" 以追加方式打開(kāi)文件
"r+" 以讀/寫(xiě)方式打開(kāi)文件,如無(wú)文件出錯(cuò)
"w+" 以讀/寫(xiě)方式打開(kāi)文件,如無(wú)文件生成新文件
一個(gè)文件可以以文本模式或二進(jìn)制模式打開(kāi),這兩種的區(qū)別是:在文本模式中回車被當(dāng)成一個(gè)字符’\n’,而二進(jìn)制模式認(rèn)為它是兩個(gè)字符0x0D,0x0A;如果在文件中讀到0x1B,文本模式會(huì)認(rèn)為這是文件結(jié)束符,也就是二進(jìn)制模型不會(huì)對(duì)文件進(jìn)行處理,而文本方式會(huì)按一定的方式對(duì)數(shù)據(jù)作相應(yīng)的轉(zhuǎn)換。
系統(tǒng)默認(rèn)的是以文本模式打開(kāi),可以修改全部變量_fmode的值來(lái)修改這個(gè)設(shè)置,例如_fmode=O_TEXT;就設(shè)置默認(rèn)打開(kāi)方式為文本模式;而_fmode=O_BINARY;則設(shè)置默認(rèn)打開(kāi)方式是二進(jìn)制模式。
我們也可以在模式字符串中指定打開(kāi)的模式,如"rb"表示以二進(jìn)制模式打開(kāi)只讀文件,"w+t"或"wt+"表示以文本模式打開(kāi)讀/寫(xiě)文件。
此函數(shù)返回一個(gè)FILE指針,所以申明一個(gè)FILE指針后不用初始化,而是用fopen()來(lái)返回一個(gè)指針并與一個(gè)特定的文件相連,如果成敗,返回NULL.
例:
以下是引用片段:
FILE *fp;
if(fp=fopen("123.456","wb"))
puts("打開(kāi)文件成功");
else
puts("打開(kāi)文件成敗");
2.fclose()
fclose()的功能就是關(guān)閉用fopen()打開(kāi)的文件,其原型是:int fclose(FILE *fp);如果成功,返回0,失敗返回EOF。
在程序結(jié)束時(shí)一定要記得關(guān)閉打開(kāi)的文件,不然可能會(huì)造成數(shù)據(jù)丟失的情況,我以前就經(jīng)常犯這樣的錯(cuò)誤。
例:fclose(fp);
3.fputc()
向流寫(xiě)一個(gè)字符,原型是int fputc(int c, FILE *stream); 成功返回這個(gè)字符,失敗返回EOF。
例:fputc(’X’,fp);
4.fgetc()
從流中讀一個(gè)字符,原型是int fputc(FILE *stream); 成功返回這個(gè)字符,失敗返回EOF。
例:char ch1=fgetc(fp);
5. fseek()
此函數(shù)一般用于二進(jìn)制模式打開(kāi)的文件中,功能是定位到流中指定的位置,原型是int fseek(FILE *stream, long offset, int whence);如果成功返回0,參數(shù)offset是移動(dòng)的字符數(shù),whence是移動(dòng)的基準(zhǔn),取值是:
符號(hào)常量 值 基準(zhǔn)位置
SEEK_SET 0 文件開(kāi)頭
SEEK_CUR 1 當(dāng)前讀寫(xiě)的位置
SEEK_END 2 文件尾部
例:fseek(fp,1234L,SEEK_CUR);//把讀寫(xiě)位置從當(dāng)前位置向后移動(dòng)1234字節(jié)(L后綴表示長(zhǎng)整數(shù))
fseek(fp,0L,2);//把讀寫(xiě)位置移動(dòng)到文件尾
6.fputs()
寫(xiě)一個(gè)字符串到流中,原型int fputs(const char *s, FILE *stream);
例:fputs("I Love You",fp);
7.fgets()
從流中讀一行或指定個(gè)字符,原型是char *fgets(char *s, int n, FILE *stream); 從流中讀取n-1個(gè)字符,除非讀完一行,參數(shù)s是來(lái)接收字符串,如果成功則返回s的指針,否則返回NULL。
例:如果一個(gè)文件的當(dāng)前位置的文本如下:
Love ,I Have
But ……..
如果用
fgets(str1,4,file1);
則執(zhí)行后str1="Lov",讀取了4-1=3個(gè)字符,而如果用
fgets(str1,23,file1);
則執(zhí)行str="Love ,I Have",讀取了一行(不包括行尾的’\n’)。
8.fprintf()
按格式輸入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, …]);其用法和printf()相同,不過(guò)不是寫(xiě)到控制臺(tái),而是寫(xiě)到流罷了。
例:fprintf(fp,"%2d%s",4,"Hahaha");
9.fscanf()
從流中按格式讀取,其原型是int fscanf(FILE *stream, const char *format[, address, …]);其用法和scanf()相同,不過(guò)不是從控制臺(tái)讀取,而是從流讀取罷了。
例:fscanf(fp,"%d%d" ,&x,&y);
10.feof()
檢測(cè)是否已到文件尾,是返回真,否則返回0,其原型是int feof(FILE *stream);
例:if(feof(fp))printf("已到文件尾");
11.ferror()
原型是int ferror(FILE *stream);返回流最近的錯(cuò)誤代碼,可用clearerr()來(lái)清除它,clearerr()的原型是void clearerr(FILE *stream);
例:printf("%d",ferror(fp));
12.rewind()
把當(dāng)前的讀寫(xiě)位置回到文件開(kāi)始,原型是void rewind(FILE *stream);其實(shí)本函數(shù)相當(dāng)于fseek(fp,0L,SEEK_SET);
例:rewind(fp);
13.remove()
刪除文件,原型是int remove(const char *filename); 參數(shù)就是要?jiǎng)h除的文件名,成功返回0。
例:remove("c:\\io.sys");
14.fread()
從流中讀指定個(gè)數(shù)的字符,原型是size_t fread(void *ptr, size_t size, size_t n, FILE *stream);參數(shù)ptr是保存讀取的數(shù)據(jù),void*的指針可用任何類型的指針來(lái)替換,如char*、int *等等來(lái)替換;size是每塊的字節(jié)數(shù);n是讀取的塊數(shù),如果成功,返回實(shí)際讀取的塊數(shù)(不是字節(jié)數(shù)),本函數(shù)一般用于二進(jìn)制模式打開(kāi)的文件中。
例:
以下是引用片段:
char x[4230];
FILE *file1=fopen("c:\\msdos.sys","r");
fread(x,200,12 ,file1);//共讀取200*12=2400個(gè)字節(jié)
15.fwrite()
與fread對(duì)應(yīng),向流中寫(xiě)指定的數(shù)據(jù),原型是size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);參數(shù)ptr是要寫(xiě)入的數(shù)據(jù)指針,void*的指針可用任何類型的指針來(lái)替換,如char*、int *等等來(lái)替換;size是每塊的字節(jié)數(shù);n是要寫(xiě)的塊數(shù),如果成功,返回實(shí)際寫(xiě)入的塊數(shù)(不是字節(jié)數(shù)),本函數(shù)一般用于二進(jìn)制模式打開(kāi)的文件中。
例:
以下是引用片段:
char x[]="I Love You";
fwire(x, 6,12,fp);//寫(xiě)入6*12=72字節(jié)
將把"I Love"寫(xiě)到流fp中12次,共72字節(jié)
16.tmpfile()
其原型是FILE *tmpfile(void); 生成一個(gè)臨時(shí)文件,以"w+b"的模式打開(kāi),并返回這個(gè)臨時(shí)流的指針,如果失敗返回NULL。在程序結(jié)束時(shí),這個(gè)文件會(huì)被自動(dòng)刪除。
例:FILE *fp=tmpfile();
17.tmpnam();
其原型為char *tmpnam(char *s); 生成一個(gè)唯一的文件名,其實(shí)tmpfile()就調(diào)用了此函數(shù),參數(shù)s用來(lái)保存得到的文件名,并返回這個(gè)指針,如果失敗,返回NULL。
例:tmpnam(str1);
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。