1、打开和关闭文件
(1)打开文件:FILE * fopen(const char *filename, const char *mode)
在使用打开文件函数时,我们要提供一个要打开的文件名,这里要提供一个当前用户有权限进行相应mode操作的文件,且应该提供相对应的文件路径(默认路径为当前文件夹)。打开方式mode有很多种,大概有如下几种模式(参考自百度百科的参数介绍,因为我暂时看的这本书没有详细参数介绍,只给出了几种,连接:http://baike.baidu.com/link?url=ZOtXcWvvy4pfUVm37V9GaHymKEKZKxIxMjeTcxSlTxKMcEmx1ZW_MiTH1myZUcG_):
r:以只读方式打开文件,采用文本模式,文件必须存在;
rb:以只读方式打开文件,采用二进制模式,文件必须存在;
r+:以可读写方式打开文件,采用文本格式,文件必须存在;
r+b:以可读写方式打开文件,采用二进制模式,文件必须存在;(codeblcoks环境使用GCC编译器验证,原百度百科未说明)
w:以只写方式打开文件,采用文本模式,若文件存在则文件清零,若文件不存在则创立该文件;
wb:以只写方式打开文件,采用二进制模式,同上;
w+:以读写方式打开文件,若文件存在则长度清零,若文件不存在则建立该文件。
w+b:以读写方式打开二进制文件,同上;
a:以附加方式打开文本文件,只可写,若文件不存在则会创建文件;若文件存在,则会将新内容添加到文件末尾,原文件中内容保留;
ab:以附加方式打开二进制文件,同上;
a+:以附加方式打开可读写文本文件,同上;
a+b:以附加方式打开可读写二进制文件,同上;
rw+:以读写方式打开一个文本文件;
其中,r+的读写方式都在文件开头,写入操作会覆盖之前的内容,而w+在文件存在时会创建新文件覆盖之,再写入内容,二a+是从文件末尾开始添加内容。
(2)关闭文件:int fclose (FILE* stream)
每个文件打开后都要注意在程序执行的所有可能路径上关闭该文件,因为一个程序所能打开的文件数目是有限的,这点要注意!
2、fscanf和fprintf读写文件
函数原型如下:
int fscanf (FILE *stream, const char *format[, address, ...]);
int fprintf (FILE *stream, const char *format[, address, ...]);
两个函数的用法类似C/C++中的scanf和printf,只不过所面向的流对象为文件流,同时,fscanf在读到文件末尾时会返回EOF(End of file),是一个stdio.h中的内置常量。
3、fgetc和fputc读写文件
函数原型如下:
int fgetc(FILE *stream);
int fputc(int c, FILE *stream);
使用fgetc读取为文件内容,每次仅读取一个字节的文件,当读到文件末尾时,会返回EOF值;
fputc会将一个字节的数据写入文件,c是要写入的数据,虽然是int型,但是只有低8位会被写入文件,写入失败会返回EOF值。
4、fgets和fputs读写文件
函数原型如下:
char *fgets (char *s, int n, FILE *stream);
int fputs (const char*s, FILE *stream);
fgets每运行一次,会读取一行数据,包括换行符,放入s中,并加上相应的结尾标志符‘\0’,参数n代表s中最多容纳的字符数(不算‘\0’);而返回的指针和s指向同一内存区域,如果没有数据可以读取,则返回NULL;
fputs函数向文件流中写入字符串s,但写完s后并不会自动向文件中写入换行符。
5、fread和fwrite读写文件
函数原型如下:
unsigned fread (void *ptr, unsigned size, unsigned n, FILE *stream);
unsigned fwrite (const void *ptr, unsigned size, unsigned n, FILE *stream);
fread 函数从文件中读取n个大小为size字节的数据块,放入ptr开始的内存中,返回值为读取的字节数,若一个字节也未读取,返回值为0;
fwrite函数将从地址ptr开始的n*size个字节的内容写入到文件中,返回值表示成功写入的字节数。
需要注意的一点就是,fread和fwrite函数读写文件,文件必须用二进制方式打开。
6、fseek改变文件当前位置
函数原型如下:
int fseek (FILE *stream, long offset, int whence);
作用:函数将与stream关联的文件的“当前位置”设为距whence处offset字节的地方。whence可以有一下三种取值:
SEEK_SET:文件开头;
SEEK_CUR:执行本函数前文件的当前位置;
SEEK_END:文件末尾;
例如:
fseek(fp, 200, SEEK_SET);// 将文件当前位置设为距离文件开始位置为200个字节处
程序示例:
fread (aStu, sizeof (Student), 7, fpSrc); // 读取7*sizeof(Student)字节大小数据
fseek (fpSrc, sizeof (Student) * 20, SEEK_SET); // 将文件当前位置设为距离开始位置为sizeof(Student)*20个字节处