C语言之旅【8】---文件操作

发布于:2025-06-30 ⋅ 阅读:(25) ⋅ 点赞:(0)

目录

为什么会有文件?

文件的分类

数据文件

用VS2022查看二进制文件

文件的打开和关闭

流--的概念

标准流

文件指针---FILE*

打开文件和关闭文件

文件的操作

顺序读写

随机读写

文件缓冲区

 彩蛋时刻!!!


💫只有认知的突破💫才能带来真正的成长💫编程技术的学习💫没有捷径💫一起加油💫

           🍁感谢各位的观看🍁欢迎大家留言🍁咱们一起加油🍁努力成为更好的自己🍁

为什么会有文件?

数据的存储分为永久性存储和短期性存储。我们的硬盘就是永久性存储,所以我们的文件就存在硬盘上。内存是短期性存储,它一但掉电,里面的数据就会销毁。所以,文件存储在硬盘上。

文件的分类

文件分为:程序文件和数据文件。程序文件就是存储程序的文件,它启动的时候,就会调用数据文件,进行数据的读写。所以,这俩往往形影相随。关系如下图所示:

程序文件没什么可讲的,因程序文件我们一旦启动,是操作系统帮我们打开并运行,所以,我们的重点就讲数据文件的操作,数据文件的操作是靠程序文件来控制是否打开。

数据文件

数据文件的分类:二进制文件和文本文件

数据在内存中是以二进制形式运行和暂时性存储,如果先进行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是不会直接调取文件,而是从缓冲区进行数据的读写。如下图所示:

 彩蛋时刻!!!

 每章一句:“给明天的自己留一颗薄荷糖,当晨光吻醒窗台时,连呼吸都带着清凉的勇气。”


网站公告

今日签到

点亮在社区的每一天
去签到