1.为什么使用文件
在C语言中,文件操作是非常重要的,因为它允许程序与外部文件进行交互。
文件是储存在硬盘中的,也就是说即使程序终止,数据仍然存在。
通过文件操作,可以实现读取文件中的数据,将数据写入文件,创建新文件,删除文件,以及在文件中移动位置等等。
文件为同时程序提供了灵活性和功能性,它使程序可以处理各种类型的数据,如文本文件、图像文件、音频文件等。这些文件也可以供多个程序可以共享。例如,多个程序可以读取同一个配置文件,也可以将数据写入同一个日志文件。
2.文件是什么
文件是计算机系统中存储数据的基本单元。
在程序设计中,我们一般谈的文件有两种:程序文件、数据文件:
程序文件:
包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀 为.exe)。
数据文件:
文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内 容的文件。
这篇博客主要讨论的是数据文件,后面将介绍用C语言对数据文件的一些操作。
每个文件都有一个唯一的文件名用来标识它,
文件名通常由文件名前缀和文件扩展名组成。文件名前缀是文件名的主体部分,可以包含任何字符,但通常由字母、数字和下划线组成。文件扩展名是文件名后缀,通常由一个或多个点号后跟一个或多个字符组成,用于指示文件类型。例如,myfile.txt
是一个文本文件,image.jpg
是一个图像文件。
要注意,同一路径下文件名是唯一的,这是我们后面根据路径精准访问文件的基础。
3.文件的打开与关闭
3.1文件指针
C语言的文件指针是一种特殊的指针,它指向文件中的某个位置,并且可以在文件中移动,以便对文件进行各种操作,例如打开、关闭、读取、写入、定位等。
在C语言中,文件指针是通过 FILE
结构体类型来表示的。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态和文件当前的位置等)。
不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。例如,这是Visual Studio中对文件类型的声明:
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,下面我们可以创建一个FILE*的指针变量,它指向系统刚向我们创建的文件信息区(一个结构体变量)的起始位置:
FILE* pf;//文件指针变量
对于同时打开多个文件的情况,一般建议使用多个文件指针来维护多个文件信息区。
3.2文件的打开与关闭
ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件。
//打开文件
FILE* fopen(const char* filename, const char* mode);
//关闭文件
int fclose(FILE* stream);
其中,对于fopen中的mode,意思是文件的打开方式,大致有以下几种: