📣📣📣📣📣📣📣📣
✏️作者主页:枫霜剑客
📋 系列专栏: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相对于新手还不容易发现排查;
上述问题博主亲身经历过,最可气的是博主当时是接手别人做的项目来改功能,一时间找不到问题点,后来排查了一圈才发现是上一个坑逼挖的坑没关闭文件流,当然当时可能博主还很年轻,咳,不说了,瞬间感觉流下了年轻的泪水;
编程如果编不好,可能坑的不止自己,还有下一位接盘侠,在小小的程序里挖呀挖呀挖!!!
大家的「关注❤️ + 点赞👍 + 收藏⭐」就是我创作的最大动力!谢谢大家的支持,我们下文见!
🌲 请进入下一专栏: 项目实战合集
🌲 彩蛋壁纸别忘了先看哈!
新壁纸(青春没有售价)