C++中的文件操作主要有兩種:將程序中的字符寫入到文件,以及將文件中的文本讀取到程序。
一、向文件中寫入文本(...->fp):
1.int fPRints(FILE *fp, const char *format,...):
fprintf()會根據參數format字符串來轉換并格式化數據,然后將結果輸出到參數fp指定的文件中, 直到出現字符串結束('/0')為止,數字不會亂碼(%f...%d...)。
fprintf()的返回值是輸出的字符數,發生錯誤時返回一個負值,即返回EOF(符號常量,其值為-1)。
(關于fprintf()和fscanf()的一個小demo的下載地址(零分下載):點擊打開鏈接)
2.int fputc(char c, FILE *fp):
將字符ch寫到文件指針fp所指向的文件的當前寫指針的位置,即ch->fp。
注意fputc()是一個字符一個字符的寫,因此如果是一個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):
向指定的文件寫入一個字符串(不自動寫入字符串結束標記符‘/0’),成功寫入一個字符串后,文件的位置指針會自動后移,函數返回值為非負整數;否則返回EOF(符號常量,其值為-1),即string->fp。注意fputs()是一個字符串直接寫入到文件中,因此使用時直接寫入字符串即可,如下:
#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,...):
根據數據格式format從輸入流(stream)中寫入數據(argument);與fgets的差別在于:fscanf遇到空格和換行時結束,注意空格時也結束,fgets遇到空格不結束。
(關于fprintf()和fscanf()的一個小demo的下載地址(零分下載):點擊打開鏈接)
2.int fgetc(FILE *fp):
意為從文件指針stream指向的文件中讀取一個字符,讀取一個字節后,光標位置后移一個字節,即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):
從文件中讀取數據,每次讀取一行,讀取的數據保存在buf指向的字符數組中,每次最多讀取bufsize-1個字符(第bufsize個字符賦'/0'),如果文件中的該行,不足bufsize個字符,則讀完該行就結束,即fp->string。如若該行(包括最后一個換行符)的字符數超過bufsize-1,則fgets只返回一個不完整的行,但是,緩沖區總是以NULL字符結尾,對fgets的下一次調用會繼續讀該行。函數成功將返回buf,失敗或讀到文件結尾返回NULL。因此不能直接通過fgets的返回值來判斷函數是否是出錯而終止的,應該借助feof函數或者ferror函數來判斷。
返回參數:成功,則返回第一個參數buf,如果發生讀入錯誤,error指示器被設置,返回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);}
新聞熱點
疑難解答
圖片精選