目录
1、初步理解打开文件
站在系统的角度,每个文件被打开的时候都会在内存中开辟一个文件信息区,用于存放文件的相关信息(如文件名、文件状态以及文件当前的位置等)。
站在C 语言的角度,其实就是创建一个FILE类型的结构体变量,然后系统将文件的相关信息填入到这个结构体变量中。(文件的信息是OS自动填充的)
// 结构体的类型是OS已经声明过的
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
一般情况下使用一个 FILE* 类型的指针来维护这个结构体,让用户在操作文件时更加方便,这个指针就是缓冲文件系统中的关键概念 —— "文件指针"。
2、打开/关闭文件的函数
在C语言中我们可以使用 fopen 来打开一个文件,对应的,使用 fclose 来关闭文件。下面重点来了解fopen函数。
(1) fopen函数
下面是fopen函数的声明:
第一个参数 filename:文件所在路径
第二个参数 mode:打开文件的方式。可选值见下表。
返回值:文件打开成功,则返回文件对应的文件指针;打开失败,返回NULL
文件使用方式 | 含义 | 如果指定文件不存在 |
r(只读) | 读取文件内容 | 出错 |
w(只写) | 写入文件内容 | 建立一个新的文件 |
a(追加) | 在文件末尾追加数据 | 建立一个新的文件 |
rb(只读) | 读取一个二进制文件的内容 | 出错 |
wb(只写) | 向一个二进制文件写入内容 | 建立一个新的文件 |
ab(追加) | 向一个二进制文件尾追加数据 | 出错 |
r+ | 为了读写,打开一个文本文件 | 出错 |
w+ | 为了读写,建立一个新的文件 | 建立一个新的文件 |
a+ | 打开一个文件,在文件尾进行读写 | 建立一个新的文件 |
rb+ | 以可读可写的方式打开一个二进制文件 | 出错 |
rw+ | 以可读可写的方式打开一个二进制文件 | 建立一个新的文件 |
ab+ | 打开一个二进制文件,在文件尾进行读和写 | 建立一个新的文件 |
(2) fclose 函数
fclose 函数的声明如下:
参数:你希望关闭的文件指针,有点类似于将创建的文件结构体释放。
返回值:关闭成功返回0,失败返回EOF
3、fopen函数的使用
FILE* pf = fopen("D:\\data.txt", "r"); // 打开一个文件,返回文件指针
if(pf == NULL)
{
perror("fopen");
return -1;
}
fclose(pf); // 关闭文件