本篇主要介绍c语言中对文件的打开关闭操作。
1. C语言文件操作函数
C标准库中提供了一系列的函数,来操作文件。因为C库函数做了这个中间层,屏蔽掉了操作系统上对于文件的不同处理。
关于文件的常见基本操作有:
打开文件fopen()
:创建文件或打开文件载体(磁盘)中已有的文件关闭文件fclose()
:类似free,释放掉内存中与文件有关的动态资源读取文件fread()
:数据由文件载体(磁盘)到内存写入文件fwrite()
:数据由内存到文件载体(磁盘)
2. fopen:打开或创建文件
fopen的原型为:
FILE *fopen( char *filename, char *mode );
它的两个参数:
- filename:需要打开或者创建的文件的文件名
- mode:相关属性,如只读、只写、是否新建等
我们通过写出一段FILE
的程序查看VS对应下的函数原型
int main(int argc, char* argv[])
{
FILE *pFile = nullptr;
}
跳转之后:FILE是_iobuf结构体变量
typedef struct _iobuf
{
void* _Placeholder;
} FILE;
其他版本VS中FILE的封装内容:
它的返回值,是一个指向FILE结构体的指针。FILE结构体,就是C库函数对文件的抽象封装,里面记录了文件各种信息。
不过我们不用了解FILE内部的细节,因为我们不会直接操作FILE结构体,而是通过FILE*指针以及各种C库函数去间接操作FILE结构体。
实例:
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
FILE* pFile = fopen("mytest.txt", "w");
char szBuff[] = "helloworld";
fwrite(szBuff, 1, strlen(szBuff), pFile);
fclose(pFile);
return 0;
}
运行结果:在源码的位置生成mytest.txt文件,内容为helloworld
2.1 fopen中的mode参数
fopen中的mode参数是一个字符串,可以是以下情况的选择:
r
:只读方式打开,且文件必须已经存在,否则报错w
:以只写方式创建文件,如果文件已经存在,会先删除原有文件的内容a
:以附加方式打开文件,不会删除原有文件内容,而是默认将内容写在文件的末尾r+
:读写方式,与r类似,不会删除原有文件w+
:读写方式,与w类似,会删除原有文件a+
:附加及都方式
3. fclose:关闭文件,参数为一个指向FILE结构体的指针
fclose类似free的作用,告之C库函数可以关闭已经打开的文件,并回收相关资源。
下例为进行文件关闭的规范程序,在关闭之前判断是否为无效指针,之后设置指针为NULL,防止其称为野指针
。
野指针的定义为:指针地址存在,但是指针指向的是一个已经释放的资源
。
//规范的关闭文件操作
if (pFile != NULL)
{
fclose(pFile);
//对指针进行赋值,否则可能造成野指针
pFile = NULL;
}
4. 学习视频地址: C语言操作文件