C++文件操作函数-读写文件

来源:互联网 发布:win7开机时间优化 编辑:程序博客网 时间:2024/06/03 14:47

文件读写是基础中的基础,关于此类知识的文章非常多,但还是想根据自己的使用心得去总结这么一些内容。

1.文件的打开和关闭

打开和关闭

fopen()函数

FILE *fopen(char *filename, *type);

filename:可以包含 路径 和 文件名 两部分。如:“TEST.dat”、“C:\tc\TEST.dat”
type:
“r”打开文件只读。
“w”创建文字文件只写。
“a”增补,如果文件不存在则创建一个。
“r+”打开一个文字文件读/写。
“w+”创建一个文字文件读/写。
“a+”打开或创建一个文件增补。
“b”二进制文件(可以和以上每一项合并用)。
“t”文本文件(默认项)。
返回值:成功打开文件则返回文件指针;否则返回空指针(NULL)

例:
FILE *fp = fopen(strDEMFile.c_str(),_T("r"));//UNICODE以读方式打开文件
【strDEMFile 是const string类型】
另有:fopen_s()函数
FILE*fp;
fopen_s(&fp,strfileName.GetBuffer(),_T(“r”));//不能直接FILE *fp = fopen_s……
【strfileName是CString类型,应该也可以是string类型,但不能用const修饰!】

关闭

fclose()函数

int fclose(FILE *stream);//当文件关闭成功时,返回0,否则返回一个非0值;
GetBuffer(); 本函数常见于文件的打开等数据操作,由于在很多情况下需要路径是const string类型,但路径变量又是非常量。用法见上

文件的读写操作

文件的顺序写

fprintf()函数

int fprintf (FILE *stream, const char *format,)
FILE *stream:文件指针
const char *format:输出格式
< variable-list >(输出变量列表)
返回值: 是输出的字符数,发生错误时返回EOF(值为-1)。
例:
fprintf (fp,"%d\n", i);//向文件写入一个整型 变量i

fputs()-fputc函数

int fputs ( const char * str, FILE * stream );//向文件写入一个字符串
str:可以是字符型指针 或者 字符串常量
FILE *stream:文件指针
返回值:是输出的字符数,发生错误时返回EOF(值为-1)。
例:
fputs ("FuckWorld!\n", fp);

int fputc ( int c, FILE *stream );//向文件写入一个字符
c:可以是字符
FILE *stream:文件指针
返回值:是输出的字符数,发生错误时返回EOF(值为-1)。
例:

char strptr1[] = "This is a test of fputc!!\n";char *p;p = strptr1;while( (*p != '\0') && fputc(*(p++), fp) != EOF ) ;//这句话写的挺漂亮的

fscanf()函数

int fscanf ( FILE *stream, const char *format, );//顺序读取文件,遇空格和换行符结束
FILE *stream:文件指针
const char *format:输出格式
(输出变量列表)
返回值:成功,返回读入参数的个数;失败,返回EOF(值为-1)
例:
fscanf(fp, “%d”, &n);//加取地址符&
fscanf(fp, “%s”, s);//注意:读入字符串时不要取地址符!【s 为char型,如:char s[10];】
另有:fscanf_s()
例:fscanf_s(fp, “%lf %lf”, &dX, &dY);//获取X,Y坐标【lf-double】

fgets()函数

char *fgets ( char *buf, intbufsize, FILE *stream );//按顺序读bufsize个字符串,遇到换行符结束
*buf:字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的大小。
FILE *stream:文件指针
返回值:成功,则返回第一个参数buf;在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。
例:
if( fgets( line, 100, stream ) == NULL)
printf(“fgets error\n” );
else
printf( “%s”, line);//输出读取的字符串

fgetc()函数

int fgetc(FILE *stream);//按顺序读取文件,每次读取一个字符,读取后,光标位置后移一个字节。
FILE *stream:文件指针
返回值:成功,则返回所读取的一个字节;失败,(读到文件末尾或出错)则返回EOF

二进制文件的读写(随机读写)

常用读写方法:

int fseek(FILE * stream, long offset, int fromwhere); //设置文件指针stream的位置int fread(void *buf, int size, int count, FILE *stream); //二进制读int fwrite(void *buf, int size, int count, FILE *stream); //二进制写long ftell(FILE *stream); //获取文件位置指针当前位置相对于文件首的偏移字节数

Tips:
fputs和fwrite函数在输入’\n’的时候,会最自动在前面添加一个’\r’,这样会导致最后输出的文本多一行空行,想要不自动加,则在fopen的时候就指定“b”参数(二进制文件)