一、文件的概念
文件的概念:
文件是一种装载数据和信息的载体,存储着用户输入或者处理得到的各种有用信息,例如:文本文档、图片、音乐和视频等等(从硬盘上的文件是文件)。文件与内存的作用都是用于存储数据,区别在于内存是存储CUP的临时数据,无法持久化保存,会导致数据丢失。因此我们可以使用文件进行持久化保存。
1.1 文件名:
- 一个文件要有一个唯一的文件标识,便于用户的引用
- 文件名包括三个部分:文件路径+文件名主干+文件后缀(c:\code\test.txt)
- 为了方便,文件标识常被称为文件名
1.2 程序文件和数据文件
在程序设计上,根据文件功能,一般分为两种文件:程序文件和数据文件
程序文件(用存储程序的文件):
- 程序文件包括源程序文件(后缀为.c),目标文件(windows环境下后缀为.obj),可执行程序((windows环境下后缀为.exe)
- 这里里的"程序"跟计算机技术的程序是不相同的,在这里指的为完成某项活动所规定的方式
数据文件(The data file):
- 当文件内容不是程序时,而是程序运行时读写的数据(可以是读取数据的文件,也可以是输出内容的文件)。
二、数据文件(The data file)
本篇主要谈论数据文件的相关知识。对于之前处理数据的输出输入都是以终端为对象,终端的键盘输入数据,运行结果显示到显示器上。
有时也会把数据信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用(磁盘上的文件)
2.1 二进制文件和文本文件
根据数据的组织形式,数据文件被称为文本文件或者二进制文件
- 二进制文件(存储二进制信息的文件):数据在内存中以二进制的形式存储,不加转换的输出到外存(磁盘)
- 文本文件(存储文本信息的文件):数据在内存中以ASCII的形式存储,需要在存储前转换的输出到外存
【注意】:字符一律以ASCII形式存储,数值型数据据可以使用ASCII形式存储,也可以使用二进制形式存储
【问题】:存储整数10000,以ASCII形式或二进制形式输出到磁盘中,空间的占用情况?
【占用情况】:
- ASCII形式存储:将每一个数据看成一个字符‘1’‘0’‘0’‘0’‘0’‘0’,则磁盘中占用五个字节
- 二进制形式存储:整型类型占用四个字节
int main() { int a = 10000; FILE* pf = fopen("test.txt", "wb"); fwrite(&a, 4, 1, pf);//⼆进制的形式写到⽂件中 fclose(pf); pf = NULL; return 0; }
检验下:在VS打开二进制文件
三、文件的打开和关闭
3.1 流和标准流
3.1.1 流
不同的外部设备的输入输出操作不同,为了方便统一,对各种设备进行方便的操作,提出了流的概念。
流:往往是对一种有序连续具有方向性的数据的抽象描述。(从流读取,先打开流,之后操作)
3.1.2 标准流
【问题】:为什么键盘输入数据,向屏幕上输入数据,并没有打开流呢?
在C语言程序启动时,默认打开三个流:
- stdin-标准输⼊流,在大多数的环境中从键盘输入
- stdout-标准输出流,大多数的环境中输出至显示器界面。
- stderr-标准错误流,大多数环境中输出到显示器界面。
以上三个流的类型是:FILE .*,通常称为文件指针。并且通过文件指针来维护流的各种操作,也导致使用scanf和printf等函数可以直接进行输入输出操作
四、文件指针
每当使用一个文件,都会在内存中开辟一个相应的文件信息区,用来存放文件的相关信息(文件名,文件状态以及文件当前路径)。
这些信息被保存在一个结构体变量,并且该结构体类型是由系统声明的,取名FILE.(一般通过一个FILE指针来维护这个FILE结构的变量)
VS2013编译环境提供的stdio.h
头文件中有以下的文件类型申明:
struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; }; typedef struct _iobuf FILE; 注:不同编译器的FILE类型包含的内容不完全相同,但是大差不多
每当打开一个文件,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息(使用者不用关心细节)
文件指针变量指向某个文件的文件信息区(结构体变量),并且通过文件信息区就能访问该文件。(通过文件指针间接访问相关的文件)
4.1 文件的打开和关闭
ANSIC
规定使用fopen
函数来打开文件, fclose
来关闭文件使用文件进行读写,需要三个步骤:
- 打开文件
- 文件操作
- 关闭文件
打开文件 FILE *fopen(const char *filename,const char *mode); 关闭文件 FILE *fclose(FILE *stream);
mode表示文件的打开模式,下⾯都是文件的打开模式 :
⽂件使⽤⽅式 | 含义 | 如果指定⽂件不存在 |
“r”(只读) | 为了输⼊数据,打开⼀个已经存在的⽂本⽂件 | 出错 |
“w”(只写) | 为了输出数据,打开⼀个⽂本⽂件 | 建⽴⼀个新的⽂件 |
“a”(追加) | 向⽂本⽂件尾添加数据 | 建⽴⼀个新的⽂件 |
“rb”(只读) | 为了输⼊数据,打开⼀个⼆进制⽂件 | 出错 |
“wb”(只写) | 为了输出数据,打开⼀个⼆进制⽂件 | 建⽴⼀个新的⽂件 |
“ab”(追加) | 向⼀个⼆进制⽂件尾添加数据 | 建⽴⼀个新的⽂件 |
“r+”(读写) | 为了读和写,打开⼀个⽂本⽂件 | 出错 |
“w+”(读写) | 为了读和写,建议⼀个新的⽂件 | 建⽴⼀个新的⽂件 |
“a+”(读写) | 打开⼀个⽂件,在⽂件尾进⾏读写 | 建⽴⼀个新的⽂件 |
“rb+”(读写) | 为了读和写打开⼀个⼆进制⽂件 | 出错 |
“wb+”(读写) | 为了读和写,新建⼀个新的⼆进制⽂件 | 建⽴⼀个新的⽂件 |
“ab+”(读写) | 打开⼀个⼆进制⽂件,在⽂件尾进⾏读和写 | 建⽴⼀个新的⽂件 |
以上就是本篇文章的所有内容,在此感谢大家的观看!这里是店小二C语言笔记,希望对你在学习C语言中有所帮助!