C++文件读写操作

来源:互联网 发布:淘宝好看平价女装店铺 编辑:程序博客网 时间:2024/06/06 23:56

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);}







0 0
原创粉丝点击