FILE 是一个数据结构,用于访问一个流,每一个流都有一个相应的 FILE 与它关联.
打开一个特定的文件
FILE *fopen (const char *name, const char *mode);
该函数打开一个特定的文件,并把一个流和这个文件相关联. 函数执行成功,返回一个指向 FILE 结构的指针,函数执行失败,返回一个 NULL 指针, erron 会提示问题的性质,执行该函数后非常重要的一步是对函数返回值的检查,确定文件是否打开.
- name 是文件的路径
- mode 参数表示文件的打开方式
文件路径有两种模式,绝对路径和相对路径.
- 绝对路径是从盘符开始到文件位置的完整路径
- 相对路径以当前文件位置为起始到目标文件位置的路径
. / 表示当前文件所在目录
. . / 表示当前文件所在的上一级目录
文件的常用打开方式如下:
文本文件 | 二进制文件 | |
---|---|---|
只读 | “r” | “rb” |
只写 | “w” | “wb” |
追加 | “a” | “ab” |
关闭文件
int fclose(FILE *f);
该函数关闭指定的文件,在文件关闭之前刷新缓冲区.如果函数执行成功,返回 0, 否则返回 EOF.
字符读写
int fgetc(FILE *stream);
该函数可以按字符从文件中读取.函数执行成功,返回该字符,否则返回 EOF.
int fputc(int character, FILE *stream);
该函数可以将单个字符写入写入到文件中.
行的读写
char *fgets(char *buffer, int buffer_size, FILE *stream);
该函数可以从文件中读取一行字符串,并将读入的字符串复制到 buffer 中,读取的字符串长度不超过buffer_size - 1.读取的字符串包含换行符.函数执行成功,返回第一个参数;否则返回 NULL.
int fputs(const char *buffer, FILE *stream);
该函数可以向文件中写入字符串.函数执行成功,返回一个非负值;否则返回 EOF.
格式化行的读写
int fscnaf(FILE *stream, const chat *format, ...);
该函数可以从文件中根据 format 字符串给出的格式代码对它们进行转换,函数执行成功,返回读入数据的个数;否则返回 EOF.
int fprintf(FILE *stream, const char *format, ...);
该函数可以向文件中格式化写入数据,函数执行成功,返回实际写入的数据个数;否则返回一个负值.
二进制读写
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);
fread 用于读取二进制数据, fwirte 用于向文件中写入二进制数据. buffer 指向用于保存数据的内存位置的指针, size 是读取每个元素的字节数, count 是元素个数. 函数执行成功,返回实际读或写的数据个数,如果中途遇到文件结尾或错误,返回值会比预期的少.
文件定位
long ftell(FILE *stream);
该函数返回下一个将要读取或写入位置距离文件起始位置的偏移量.
int fseek(FILE *stream, long offset, int from);
该函数将改变下一个将要在文件中读取或写入的位置.在文本文件中第二个参数和第是哪个参数如下表:
from | offset |
---|---|
SEEK_SET | 必须是一个从同一个流中以前调用 ftell 的返回值 |
SEEK_CUR | 0 |
SEEK_END | 0 |
void rewind(FILE *stream);
该函数将文件读写指针设置回文件的起始位置.