C语言中的文件操作主要包含文件的打开、读写操作以及文件的关闭。下面分别说明。
- 文件的打开:fopen()
格式:FILE * fopen(const char * path, const char * mode);
参数:path——文件所在路径;mode——文件打开方式。
| r | 以只读方式打开文件,该文件必须存在。 |
| r+ | 以可读写方式打开文件,该文件必须存在。 |
| rb+ | 读写打开一个二进制文件,允许读数据。 |
| rt+ | 读写打开一个文本文件,允许读和写。 |
| w | 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 |
| w+ | 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 |
| a | 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) |
| a+ | 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留) |
| wb | 只写打开或新建一个二进制文件;只允许写数据。 |
| wb+ | 读写打开或建立一个二进制文件,允许读和写。 |
| wt+ | 读写打开或着建立一个文本文件;允许读写。 |
| at+ | 读写打开一个文本文件,允许读或在文本末追加数据。 |
| ab+ | 读写打开一个二进制文件,允许读或在文件末追加数据。 |
返回值:如果文件打开成功,返回指向该文件的指针,否则返回空指针NULL,并把错误代码存在errno中。
- 文件的读写
1.fread()和fwrite()函数(适合对数据块进行操作)
格式:size_t fread(void * buffer, size_t size, size_t count, FILE * stream);
size_t fwrite(void * buffer, size_t size, size_t count, FILE * stream);
参数:buffer——用于接收或提供数据的地址(指针);
size——单个元素大小,单位是字节;
count——元素个数;
stream——提供或接收数据的文件指针
2.fgetc()和fputc()(字符读写函数)
格式:int fgetc(FILE * stream);
int fputc(int n, FILE * stream);
说明:fgetc()返回读取的一个字符(仅用其低8位),同时光标位置后移一个字节,如果读到末尾或出错返回EOF(-1);fputc()将字符量n输出到stream指向的文件中,返回值的情况与fgetc()相同。
3.fgets()和fputs()函数(字符串读写函数)
格式:char * fgets(char * str, int num, FILE * stream);
int fputs(const char * str, FILE * stream);
参数:str——读入(要写入)的字符串存储的位置;
num——读取的最大字符数目;
stream——文件指针
fgets()调用成功返回str,否则返回空指针;fputs()调用成功返回非负值,否则返回EOF。
4.fprintf()和fscanf()函数(格式化读写)
格式:int fprintf(FILE * stream, const char * format, [argument]);
int fscanf(FILE * stream, const char * format, [argument]);
返回值是成功读取(或写入)的参数的个数。
例子:fprintf(fp, “%s %s %d %f”, str1, str2, a,b);
5.ftell()函数
格式:long ftell(FILE *stream);
得到流式文件当前读写位置,其返回值是当前读写位置偏离文件头部的字节数。
6.fseek()函数
格式:int fseek(FILE *stream, long int offset, int origin);
参数:stream——文件指针;
offset——从origin开始偏移的字节量;
origin——偏移的起始位置,具体有如下3个值
| Constant | Reference position |
|---|---|
| SEEK_SET | Beginning of file |
| SEEK_CUR | Current position of the file pointer |
| SEEK_END | End of file * |
执行成功返回值0,否则返回非0值。
7.rewind()函数
格式:int rewind(FILE * stream);
功能:将文件内部的位置指针重新指向一个流的开头。
- 文件的关闭
fclose()函数
格式:int fclose(FILE * stream);
- 常用函数举例:获取文件大小
/** input: file name output: file length */ int getFileSize(char * strFileName){ FILE * fp = fopen(strFileName, "r"); fseek(fp, 0L, SEEK_END); int size = ftell(fp); rewind(fp); //read file operation below... fclose(fp); return size; }