C语言之文件操作上卷(二十一)(逆行人生-2024)

📣📣📣📣📣📣📣📣
✏️作者主页:枫霜剑客
📋 系列专栏:C语言知识学习归纳总结(逐梦篇专栏合集)
🌲上一篇: C语言之复合类型下卷(十九)(自然法则)(2023)
📣📣📣📣📣📣📣📣

🎍逐梦编程,让中华屹立世界之巅。
🎍简单的事情重复做,重复的事情用心做,用心的事情坚持做;

在这里插入图片描述


前言

《晨光初照梦初醒,夜幕低垂思未休。》
《把握今朝勤努力,不负韶华壮志酬。》

“当岁月悄然步入2024年的门槛,回望往昔,那些灯火阑珊下的刻苦钻研,如今已化作沉甸甸的收获。时光如白驹过隙,让人不禁感叹其匆匆流逝,但正是这有限的时间,更激发了我们珍惜每一刻的决心。让我们带着这份对知识的渴望与追求,继续前行,在未来的道路上,以更加坚定的步伐,书写属于自己的辉煌篇章,不负韶华,不负时光。”

奔跑吧,曾经的少年、未来的少年!!!

本节将学习C语言文件操作,初步认识文件是什么、文件标准接口使用;


一、C语言眼中的文件是什么呢?

在操作系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。例如:
通常把显示器称为标准输出文件,printf 就是向这个文件输出数据;
通常把键盘称为标准输入文件,scanf 就是从这个文件读取数据。

在这里插入图片描述
操作文件的正确流程为:打开文件 --> 读写文件 --> 关闭文件。文件在进行读写操作之前要先打开,使用完毕要关闭

二、文件流

在所有的文件(保存在磁盘)都要载入内存才能处理,所有的数据必须写入文件(磁盘)才不会丢失。数据在文件和内存之间传递的过程叫做文件流,类似水从一个地方流动到另一个地方。数据从文件复制到内存的过程叫做输入流,从内存保存到文件的过程叫做输出流

文件是数据源的一种,除了文件,还有数据库、网络、键盘等;数据传递到内存也就是保存到C语言的变量(例如整数、字符串、数组、缓冲区等)。我们把数据在数据源和程序(内存)之间传递的过程叫做数据流(Data Stream)。相应的,数据从数据源到程序(内存)的过程叫做输入流(Input Stream),从程序(内存)到数据源的过程叫做输出流(Output Stream)。

三、二进制文件与文本文件的区别

1、文本文件 : 存储时,是将字符的ascii值存在磁盘中,取的时候将数值(ascii)翻译成对应的字符;
2、二进制文件: 存的是二进制,取的是二进制;

在这里插入图片描述

四、文件指针

当打开一个文件时,系统会返回一个结构体,这个结构体有对此文件操作的所有信息;调用fopen时,系统返回这个结构体地址:

代码示例如下:

	FILE *fp = fopen("./a.txt","w");

在这里插入图片描述

五、打开文件与关闭文件(fopen、fclose)

1、内功心法:打开的选项,只有带r的选项,如果文件不存在,则不创建文件,带w选项的,打开时会清空文件

2、fopen的返回值: 如果成功返回FILE结构体地址,失败返回NULL
返回的文件流指针标识了打开的那个文件

2、fclose:
fclose(FILE *fp)
功能: 关闭文件
参数: 文件流指针;

在这里插入图片描述

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main01()
{
	//r 只读 ,如果文件不存在,不创建 
	//w 只写  清空文件 ,如果文件不存在,创建文件
	//r+ 可读可写  如果文件不存在,不创建
	//w+ 可读可写清空文件,  如果文件不存在,创建文件
	//a追加   如果文件不存在,会创建文件
	//b  二进制文件
	//打开一个文件,成功返回FILE结构体地址,失败返回NULL
	
	FILE *fp = fopen("./a.txt","w");
	if (NULL == fp)
	{
		perror("open");
		return;

	}
	char buf[10] ={22,-6,-9,75,91};
	int i = 0;
	while (buf[i] != 0)
	{
		fputc(buf[i],fp);
		i++;
	}
	fclose(fp); //关闭文件流
	system("pause");
	return 0;
}

六、vs中. 当前./相对路径问题

1、如果直接在vs中调试运行: 相对路径相对的是工程文件,如下图所示:

在这里插入图片描述

2、如果手动运行,.exe文件.相对路径相对的是可执行文件

七、设备文件

在这里插入图片描述

总结

在这里插入图片描述

以上就是今天要讲的内容,本节介绍了最值得注意的文件流、返回的结构体指针各个成员作用重要知识点,接着介绍了打开关闭文件的基础操作;

本节最核心问题:记得打开文件后,如果使用完这个文件暂时不用的话需要fclose关掉他,否则你可能开发的时候,例如两个地方代码调用同个配置文件,由于你上一次没去关闭,下一次就无法打开,这个bug相对于新手还不容易发现排查

上述问题博主亲身经历过,最可气的是博主当时是接手别人做的项目来改功能,一时间找不到问题点,后来排查了一圈才发现是上一个坑逼挖的坑没关闭文件流,当然当时可能博主还很年轻,咳,不说了,瞬间感觉流下了年轻的泪水;

编程如果编不好,可能坑的不止自己,还有下一位接盘侠,在小小的程序里挖呀挖呀挖!!!

大家的「关注❤️ + 点赞👍 + 收藏⭐」就是我创作的最大动力!谢谢大家的支持,我们下文见!

🌲 请进入下一专栏: 项目实战合集

🌲 彩蛋壁纸别忘了先看哈!

在这里插入图片描述
在这里插入图片描述

新壁纸(青春没有售价)

在这里插入图片描述
在这里插入图片描述

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑶池酒剑仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值