【C语言】文件操作(上)

前言

本文主要讲解文件的基础概念,我会给大家讲解我们为什么会使用到文件这种东西,以及文件的分类。本文主要以提问的方式来展开话题。

希望读者们能沉下心来,好好思考!💖💖💖

1. 为什么会使用文件?

我先给大家一个简单的代码:

#include<stdio.h>
int main()
{
	int a = 0;
	printf("%d\n",a);
	
	scanf("%d",&a);
	printf("%d\n",a);//当我再次运行这段代码时,一开始a的值还会是之前我输入的值吗?
	
	return 0;
}

这段代码很简单,我想给大家表达的意思是,我第一次运行这段代码,调用scanf函数通过键盘给变量a输入一个值,然后程序就结束了。那么问题来了,当我再次运行这段代码时,我之前给变量a的值消失不见了。

到这里我们就发现了一个问题,我们程序的数据随着程序的结束就会消失不见了。其背后的原理也很简单,随着程序的结束,操作系统会自动回收内存空间里面的内容,而我们程序的数据就是在内存中存储的。

那我们就会想到能不能用一个外部的容器在程序还未结束时,就将一些关键的数据给保存起来。文件这时就能够大展身手了。

所以,文件的作用就是对数据的持久化保存,不让数据随着程序的退出而消失。这也就是我们使用文件的原因。

2. 什么是文件?

在上面我提到了一个外部容器来存储数据,那个外部容器就是“硬盘”。

硬盘(磁盘)上的文件就是文件。

但是在程序设计中,我们一般只讨论两种文件:数据文件、程序文件(从文件功能角度进行划分)。

2.1 程序文件

程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行文件(windows环境后缀为.exe)。

这些文件的后缀大家在编程时或多或少都接触过,就不详细展开来讲了。

程序文件不是我们学习的重点,大家了解即可。数据文件才是我们学习的重点!

2.2 数据文件

文件的内容不一定是程序,也可以是程序运行时读写的数据,比如:程序运行需要从读取文件的数据,或输出内容到文件中。

总而言之,数据文件就是程序运行时数据流动的一个起点和终点。

回想我们之前所处理数据的输出和输入都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显示器上。

其实有的时候我们也会将信息输出到磁盘上,当需要的时候再从磁盘中把信息给读取到内存中使用,这里就是在操作磁盘上的文件。

2.3 文件名

一个文件要有一个唯一的标识,方便用户在茫茫文件中识别和引用。
就像我们的身份证一样,每个人的身份证都是独一无二的,看到身份证我就知道这个人就是你了。

文件名包括三个部分:文件路径 + 文件名主干 + 文件后缀
例如:c:\code\test.txt
其中,**c:\code**,就是该文件的路径;test就是文件名主干;.txt是文件后缀。

为了方便起见,我们常把文件标识就称作文件名

3. 二进制文件和文本文件

上面我们提到的数据文件和程序文件,是基于文件功能的角度出发的。

根据数据的组织形式,数据文件又可以被分为二进制文件文本文件

数据在内存中是以二进制的形式来存储的,如果不加以任何的形式直接输出到外存的文件中,就是二进制文件

如果要求在外存上以ASCII码形式来存储,则需要在存储之前进行转换。以ASCII码形式输出到外存的文件中,就是文本文件

这里我就写给大家一段代码,感受一下文本文件和二进制文件:

#include<stdio.h>
int main()
{
	int num = 10;
	//打开文件
	FILE* pf = fopen("test.txt","wb");

	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	//写文件
	fwrite(&num,sizeof(num),1,pf);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

二进制文件
二进制文件内容

#include<stdio.h>

int main()
{
	FILE* pf = fopen("test.txt","w");

	if (pf == NULL)
	{
		perror(pf);
		return 1;
	}

	fputs("123456",pf);

	fclose(pf);
	pf = NULL;

	return 0;
}

文本文件内容
以上就是二进制文件和文本文件的详细讲解了。

总结

本文给大家传递一个信息就是文件的重要性,以及文件的分类。这些对我们后续学习文件操作是很有必要的,希望读者们能够好好的理解。

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值