在 C 语言 中,我们需要操作 文件,那么首先我们就必须要打开文件,打开文件操作完毕后,还需要 关闭文件,如果只打开文件,不关闭文件,会造成系统资源的浪费。
在 C 语言中,打开文件使用 fopen 函数,打开文件时,我们需要知道文件的路径和打开文件的方式。
FILE *fopen(char *filename, char *mode);
参数 | 描述 |
---|---|
filename | 要打开的文件路径。 |
mode | 要打开的文件的方式。 |
如果打开成功,则返回一个 FILE 指针,否则,返回 NULL。
fopen 函数在 stdio.h 的头文件里面。
fopen() 会获取文件信息,包括文件名、文件状态、当前读写位置等,并将这些信息保存到一个 FILE 类型的 结构体 变量中,然后将该 变量 的地址返回。
不同的操作需要不同的文件权限。如果,只想读取文件中的数据的话,“只读” 权限就够了;既想读取又想写入数据的话,“读写” 权限就是必须的了。
另外,文件也有不同的类型,按照数据的存储方式可以分为二进制文件和文本文件,它们的操作细节是不同的。在调用 fopen() 函数时,这些信息都必须提供,称为 “文件打开方式”。
打开方式 | 说明 |
---|---|
“r” | 以 “只读” 方式打开文件。只允许读取,不允许写入。文件必须存在,否则打开失败。 |
“w” | 以 “写入” 方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。 |
“a” | 以 “追加” 方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。 |
“r+” | 以 “读写” 方式打开文件。既可以读取也可以写入,也就是随意更新文件。文件必须存在,否则打开失败。 |
“w+” | 以 “写入/更新” 方式打开文件,相当于 w 和 r+ 叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。 |
“a+” | 以 “追加/更新” 方式打开文件,相当于 a 和 r+ 叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。 |
打开方式 | 说明 |
---|---|
“t” | 文本文件。如果不写,默认为"t" 。 |
“b” | 二进制文件。 |
调用 fopen() 函数时必须指明读写权限,但是可以不指明读写方式(此时默认为 "t"
)。读写权限和读写方式可以组合使用,但是必须将读写方式放在读写权限的中间或者尾部(换句话说,不能将读写方式放在读写权限的开头)。例如:
整体来说,文件打开方式由 r、w、a、t、b、+ 六个字符拼成,各字符的含义是:
字符 | 描述 |
---|---|
r | read,读 |
w | write,写 |
a | append,追加 |
t | text,文本文件 |
b | banary,二进制文件 |
+ | 读和写 |
使用 fopen 函数打开文件
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("嗨客网(www.haicoder.net)\n\n");
FILE *fp = NULL;
if ( (fp = fopen("c:\\1.txt", "rt")) == NULL )
{
puts("Open file failed\n");
return;
}
else
{
puts("Open file success\n");
return;
}
return 0;
}
程序运行后,控制台输出如下:
我们使用了 fopen 函数,打开了一个 c 盘的文件,以只读的方式读取该文件,并将读取到的内容赋值给 FILE 类型的 fp 指针。
接着,我们使用 if 语句 判断,我们打开的文件指针是否为 NULL,如果为 NULL,则表明打开文件失败,否则,则表示打开文件成功。
这里,因为,我们文件不存在,所以打开文件失败,现在,我们在 C 盘创建该文件,再次使用上面的程序打开该文件,此时程序运行后,控制台输出如下:
此时,因为文件存在,所以,我们的文件打开成功了。
在 C 语言中,打开文件使用 fopen 函数,打开文件时,我们需要知道文件的路径和打开文件的方式。