目录
4.2对比一组函数(scanf,fscanf,sscanf——printf,fprintf,sprintf)
1.有必要使用文件吗?
当程序运行之后,此时数据保存在内存中,当退出运行程序的时候,产生的数据就会在内存上消失,为了保存运行时的要储存的数据,以便于下一次运行程序的时候能够调用上一次运行程序时产生的数据,我们采用了文件操作。
2.什么是文件?
磁盘上的文件就是文件,文件操作就是去生成或者调用这些文件,这些文件一般可以分为,程序文件和数据文件。
2.1程序文件
程序文件包括:
1.源程序文件(后缀为.c)
2.目标文件(windows环境后缀为.obj)
3.可执行程序(windows环境 后缀为.exe)
2.2数据文件
文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。
可执行程序输出的不一定在屏幕上,也可以是输出一个文件,存放在磁盘上。
2.3文件名
一个文件要有 唯一的一个文件标识(文件名),以便用户识别和引用
文件名包含三个部分:
1.文件路径:C:\code
2.文件名主干:test
3.文件后缀:.txt
例如:C:\code\test.txt
3.文件的打开和关闭
3.1文件指针
缓冲文件系统中,关键的概念是“
文件类型指针
”
,简称
“
文件指针
”
。 每个被使用的文件都在内
存中开辟了一个相应的 文件信息区 ,用来存放文件的相关信息(如文件的名字,文件状态及文件当
前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统 声明的,
取名
FILE.
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;//FILE就是一个结构体的类型,里面的成员变量存的是文件的一些文件信息
不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。
每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信
息, 使用者不必关心FILE类型的变量如何创建的,只需要知道它是会被创建好就行。
一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。
下面我们可以创建一个FILE*的指针变量:
FILE *pf;//pf就是一个文件指针类型的变量
定义pf
是一个指向
FILE
类型数据的指针变量。可以使
pf
指向某个文件的文件信息区(是一个结构体变量)。
通过该文件信息区中的信息就能够访问该文件。
也就是说,
通过文件指针变量能够找到与它关联的文件。
比如:
3.2文件打开和关闭的具体方法
去访问一个文件的时候,首先要打开这个文件(fopen),其次要对这些文件进行读或者写的操作,最后会试着去关闭这个文件(fclose)
接下来详细探讨一下如何对文件进行打开、读写和关闭的操作
1.fopen
FILE * fopen ( const char * filename, const char * mode );
函数的含义:
filename:fopen打开的文件名字
mode:fopen打开的文件的方式(可读还是可写)
返回值:如果打开成功返回的是该文件的文件指针,如果打开失败返回NULL指针
mode分为以下几种:
“r”
(只读)
|
为了输入数据,打开一个已经存在的文本文件 | 出错 |
“w”
(只写)
|
为了输出数据,打开一个文本文件 | 建立一个新的文件 |
“a”
(追加)
|
向文本文件尾添加数据
|
建立一个新的文件
|
“rb”
(只读)
|
为了输入数据,打开一个二进制文件
|
出错
|
“wb”
(只写)
|
为了输出数据,打开一个二进制文件
|
建立一个新的文件
|
“ab”
(追加)
|
向一个二进制文件尾添加数据
</ |