当前位置: 首页 > java >正文

从上帝视角看文件操作

1.为什么使用文件?

如果没有文件,我们写的程序中的数据是存储在电脑的内存中,当程序退出时,内存被回收后,数据就丢失了,等下次运行程序,是无法看到上次程序的数据的。(比如我们在程序中写通讯录时,联系人的相关数据都是放在内存中的,当程序退出时,这些数据也会随之消失,下次运行通讯录时,又得重新录入数据,很是麻烦。)因此,可以使用文件来长期保存数据。

2.文件的相关介绍

2.1:什么是文件?

外存(如C盘、D盘、U盘等)上的文件就是文件。

2.2:文件的分类

在程序设计中,我们⼀般谈的文件有两种(按功能划分):程序文件与数据文件。本篇博客讨论的是数据文件。

a.程序文件

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

b.数据文件

存放数据的文件。数据是指程序运行时从文件中读、写的数据。程序运行时既可以从数据文件中读取数据,也可以将数据输出到数据文件中。

2.3:文件名

每个文件都有唯⼀的文件标识,以便用户识别和使用。文件名包含3部分:文件路径+文件名主干+文件后缀。
在这里插入图片描述

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

3.1:二进制文件与文本文件的介绍

根据文件中存储的内容不同,可将文件分为二进制文件与文本文件。我们知道数据在内存中是以⼆进制的形式存储。若数据依旧以二进制的形式存储到外存的文件中,则该文件就是二进制文件;若数据以ASCII码的形式存储到外存的文件中,则该文件就是文本文件。文本文件通过记事本打开时,肉眼是能够看懂的,而二进制文件通过记事本打开时,全部是乱码,肉眼看不懂。
在这里插入图片描述

#include <stdio.h>
int main()
{int a = 10000;FILE* pf = fopen("test.txt", "wb");//f:file(文件),o:open(打开)/*fopen函数在该源文件所在的路径下,打开名为test.txt的文件(若该文件不存在,就在该源文件所在的路径下,创建名为test.txt的文件),并在该文件中写入二进制的数据。w:write(写),b:binary(二进制)*/fwrite(&a, 4, 1, pf);//在该文件中写入二进制的数据,该数据占4个字节,写入1次fclose(pf);//关闭该文件pf = NULL;return 0;
}

在这里插入图片描述

4.文件的打开与关闭

4.1:

流是一个高度抽象的概念。我们知道水流里面流淌的是水,而我们要探讨的流是指数据流,它里面流淌的是数据。程序在读取(输入)数据或写入(输出)数据时,并不是直接与外部设备进行数据传输,而是通过流来进行,流是程序与外部设备之间进行数据传输的中转站。以程序从外部设备中读取数据为例:先要打开流,然后外部设备将数据传输给流,程序再从流中读取数据。
在这里插入图片描述

4.2:标准流

程序在运行时,我们经常从键盘上读取数据,然后将程序运行的数据输出到屏幕上,为什么我们没有手动打开流呢?因为C语⾔程序在启动的时候,默认打开了3个流:标准输入流 stdin,标准输出流 stdout,标准错误流 stderr。
在这里插入图片描述

4.3:文件指针变量的介绍

缓冲文件系统中,有个关键的概念: 文件指针变量,简称文件指针。每当打开文件时,会在内存中开辟⼀个相应的文件信息区(本质上是结构体类型变量,即FILE类型的变量),用来存放该文件的相关信息(如文件的名字,文件状态及文件的存储位置……)。该结构体类型是由系统创建的,并用typedef将该结构体类型重命名为 FILE类型。
在这里插入图片描述
不同的C语言编译器中,FILEl类型包含的内容可能会有所不同,但大致是一样的。每当打开文件时,系统会根据该文件的情况自动创建⼀个FILE类型的变量,并填充其中的信息。文件的使用者不必关心填充的内容是什么。可以通过FILE *类型的指针变量来维护这个FILE类型的变量。

4.4:文件指针变量的创建

文件指针变量也就是FILE*类型的指针变量。

FILE * pf;

pf是指向FILE类型变量的指针变量。它指向某个文件的文件信息区(本质是⼀个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够间接找到与它关联的文件。

在这里插入图片描述

4.5文件的打开与关闭

就像我们在冰箱中放/取东西,先打开冰箱门,放/取东西,关闭冰箱门;在对文件进行操作时,我们需要先打开文件,再从文件中读取数据或者向文件中写入数据,最后记得要关闭文件。
每当打开文件时,系统会自动创建一个文件信息区,并返回文件信息区的地址(FILE * 类型),可以将该地址存放到FILE*类型的指针变量中,这样就能将文件与指针变量建立联系了。

a.绝对路径与相对路径

绝对路径是从根目录开始的,相对路径是从当前文件所在的路径开始的。

b.当前路径与上一级路径

在这里插入图片描述

c.fopen函数和fclose函数的介绍

在这里插入图片描述
在这里插入图片描述
示例1:
在这里插入图片描述
示例2:

int main()
{FILE* pf = fopen("C:\\AppStore\\WebCache\\test.txt", "w");//     '\\'是转移字符,表示一个'\'//"C:\\AppStore\\WebCache\\test.txt"是绝对路径 + 文件名 + 文件名后缀,该路径也可以写成"C:/AppStore/WebCache/test.txt"//若文件打开成功,则返回该文件的文件信息区的地址if (pf == NULL){//test.txt文件打开失败perror("fopen:");return 1;}else{printf("文件打开成功\n");}return 0;
}

示例3:

#include<stdio.h>
int main()
{//若test.txt文件在当前源文件的上一级路径下,FILE* pf = fopen(".\\..\\test.txt", "w");//以写的方式打开test.txt文件,//".\\..\\test.txt"表示相对路径 + 文件名 +文件名后缀//也可以写为"./../test.txt"//若文件打开成功,则返回该文件的文件信息区的地址if (pf == NULL){//test.txt文件打开失败perror("fopen:");return 1;}else{printf("文件打开成功\n");}//接着读取文件中的数据,或者向文件中写入数据//......//最后关闭文件fclose(pf);pf = NULL;
http://www.xdnf.cn/news/3893.html

相关文章:

  • 杜教筛原理,实现与时间复杂度分析
  • 【服务器通信-listen】——int listen(int sockfd, int backlog)
  • 【多次弹出“获取打开此tobiieyetracking链接的应用”的窗口】解决办法
  • [硬件电路-11]:模拟电路常见元器件 - 什么是阻抗、什么是输入阻抗、什么是输出阻抗?阻抗、输入阻抗与输出阻抗的全面解析
  • Python_leve2.1
  • Python语句入门:从基础到实践
  • STM32的定时器
  • 在Linux中如何创建自定义的systemd服务的步骤
  • 动静态库【Linux操作系统】
  • 股指期货风险管理功能及基差、升水、贴水的影响
  • 牛客月赛115 C题-命运之弹 题解
  • Linux环境下的进程创建、退出和进程等待
  • 谷歌 NotebookLM 支持生成中文播客
  • n8n 条件节点详解:IF 与 Switch 的多分支工作流设计
  • 虚函数VS虚拟继承:C++多重继承二义性破解与性能调优
  • 论快乐的学习和学习的快乐
  • 万字详解ADC药物Payload
  • Debezium 架构详解与实战示例
  • 【操作系统】深入理解内存管理:从虚拟内存到OOM Killer
  • cloudfare+gmail 配置 smtp 邮箱
  • 【CISCO】Se2/0, Se3/0:串行口(Serial) 这里串口的2/0 和 3/0分别都是什么?
  • React hooks详解
  • 快速外网访问,证书自动续约 | 极空间IPv4IPv6 DDNS 配置详解
  • 数据结构与算法:回溯
  • Python:Seaborn 美化图表的技术指南
  • 【五一培训】Day 4
  • 常用命令集合
  • PCB叠层设计方案
  • 探秘DeepSeek模型参数:解锁AI潜能的密码
  • GenCLS++:通过联合优化SFT和RL,提升生成式大模型的分类效果