目录
💫只有认知的突破💫才能带来真正的成长💫编程技术的学习💫没有捷径💫一起加油💫
🍁感谢各位的观看🍁欢迎大家留言🍁咱们一起加油🍁努力成为更好的自己🍁
为什么会有文件?
数据的存储分为永久性存储和短期性存储。我们的硬盘就是永久性存储,所以我们的文件就存在硬盘上。内存是短期性存储,它一但掉电,里面的数据就会销毁。所以,文件存储在硬盘上。
文件的分类
文件分为:程序文件和数据文件。程序文件就是存储程序的文件,它启动的时候,就会调用数据文件,进行数据的读写。所以,这俩往往形影相随。关系如下图所示:
程序文件没什么可讲的,因程序文件我们一旦启动,是操作系统帮我们打开并运行,所以,我们的重点就讲数据文件的操作,数据文件的操作是靠程序文件来控制是否打开。
数据文件
数据文件的分类:二进制文件和文本文件。
数据在内存中是以二进制形式运行和暂时性存储,如果先进行ASC||转换,再存储到外设中,所存储的文件就是文本文件。反之,不进行ASC||转换,直接存储到外设中,所存的文件就是二进制文件。如下所示的例子:
进行1000的存储
在内存中的存储格式:00000000 00000000 00000011 11101000
如图所示:
总结:文本文件是以ASC||存储的,就是直接进行字符存储,我们能看得懂,二进制文件就是直接存储的可执行的二进制文件,我们看不懂。
用VS2022查看二进制文件
Demo例子:写一份Demo,我们进行查看。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 1000;
FILE* pf = fopen("test.txt", "wb"); //打开文件,以二进制的形式写进去
if (!pf) //判断打开是否成功
{
perror("fopen!");
return 1;
}
fwrite(&a, 4, 1, pf);
fclose(pf); //关闭文件
pf = NULL;
return 0;
}
1STEP:
2STEP:
3STEP:
4STEP:
结果:
文件的打开和关闭
流--的概念
不同的外设,它的驱动方式是不同,随着科技的快速发展,外设的种类也越来越多。如果,要求程序员必须掌握每一个外设驱动方式的话,就会大大增加程序编写的成本,降低工作效率。因此就提出了流的概念。在程序员和各种外设之间建立起流,这样的话,程序员只需要关系怎么操作流就OK了。如下所示:
标准流
C语言中,规定了三种标准流,这三种标准流是在程序运行的时候,就默认打开的。
stdin <--------> scanf
stdout <--------> printf
stderr <--------> perror
文件指针---FILE*
FILE是一个用来描述文件的一个结构体。它的结构如下:
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
OS会为每个文件创建一个文件信息区,里面存储的是描述这个文件的所有信息。通过这个文件信息区就可以找到这个文件了。如图所示:
打开文件和关闭文件
C语言规定,打开文件和关闭文件的函数分别为:fopen&fclose。结构如下:
//fopen:
FILE * fopen ( const char * filename, const char * mode );
//fclose
int fclose ( FILE * stream );
mode常用的模式如下:
文件的操作
顺序读写
以上就是常用的顺序读写函数,可以自行用一下。顺序读写,是指光标依次向后移动。
随机读写
fseek:根据文件指针的位置和偏移量来定位文件指针
ftell:返回指针相对起始位置的偏移量
rewind:让文件指针的位置回到文件的起始位置
我可以随机定位光标的位置,然后在此进行数据的读写。
文件缓冲区
为了提高CPU运行的效率,CPU是不会直接调取文件,而是从缓冲区进行数据的读写。如下图所示:
彩蛋时刻!!!
每章一句:“给明天的自己留一颗薄荷糖,当晨光吻醒窗台时,连呼吸都带着清凉的勇气。”