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);}
新闻热点
疑难解答
图片精选