一、文件的打开关闭
指向一个保存打开文件信息的结构体变量,该结构体类型为'FILE'。
在'stdio.h'中声明:
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
FILE *fopen (const char *__restrict __filename, const char *__restrict __modes);
int fclose (FILE *__stream);
int fflush (FILE *__stream);
文件打开方式 | 含义 | 指定文件不存在 |
---|---|---|
“r"(只读) | 为了输入数据,打开一个文本文件 | 出错 |
"w"(只写) | 为了输出数据,打开一个文本文件 | 建立一个新的文本文件 |
"a”(追加) | 向文件文本尾添加数据 | 出错 |
"rb"(只读) | 为了输入数据,打开一个二进制文件 | 出错 |
"wb"(只写) | 为了输出数据,打开一个二进制文件 | 建立一个新的二进制文件 |
"ab"(追加) | 向二进制文件尾添加数据 | 出错 |
二、文件的顺序读写。
功能 | 函数名 | 适用范围 |
---|---|---|
字符输入函数 | fgetc | 所有输入流 |
字符输出函数 | fputc | 所有输出流 |
文本行输入函数 | fgets | 所有输入流 |
文本行输出函数 | fputs | 所有输出流 |
格式化输入函数 | fscanf | 所有输入流 |
格式化输出函数 | fprintf | 所有输出流 |
二进制输入函数 | fread | 文件 |
二进制输出函数 | fwrite | 文件 |
三、文件的随机读写
1、fseek函数
根据文件指针位置和偏移量来定位文件指针
int fseek(FILE* stream,long int offset,int origin);
2、ftell函数
计算文件指针相对于起始位置的偏移量
long int ftell(FILE* stream);
3、rewind函数
让文件指针的位置回到文件的起始位置
void rewind(FILE* stream);
四、文件读取结束的判断
- feof()用来判断文件内部指针是否指向文件末尾,当指向文件末尾时返回非零值,否则返回零值。
- ferror()函数用来判断文件操作是否出错,出错时返回非零值,否则返回零值。
注:在文件读取过程中,不能使用feof()函数的返回值来直接判断文件是否结束。而是应用于当文件读取结束时,判断是读取失败结束,还是遇到文件尾结束。
1、文本文件读取是否结束,判断返回值是否为EOF(fgetc)、NULL(fgets)
例如:
- fgetc判断是否为EOF
- fgets判断返回值是否为NULL.
2、二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。
例如:
- fread判断返回值是否小于实际要读的个数.
五、文件缓冲区
从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后再一起送到磁盘上。如果从磁盘像计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序缓冲区。
标签:__,文件,函数,int,常见,FILE,缓冲区,文本 From: https://www.cnblogs.com/saury-2022/p/16734550.html因为有缓冲区的存在,C语言在操作文件的时候,需要用fflush函数刷新缓冲区或者在文件操作结束的时候关闭文件。