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

文件操作和IO—初识文件

认识文件

狭义上的文件(file),是针对硬盘这种持久化存储的IO设备,当我们想要进行数据保存的时候,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,类似于办公桌上一份份文件一样。

计算机中存储数据的设备:对于计算机来说,“文件”是一个广义的概念,硬盘上的普通文件,硬盘上的目录(文件夹),很多的硬件设备,都是被操作系统抽象成了文件(键盘、显示器、网卡……)

作为程序员,我们并不关心硬盘的内部物理结构,写代码时并不涉及这些结构细节,操作系统都帮我们封装好了。操作系统有一个专门的模块,把硬件细节封装好,提供统一的API来给程序员调用。

文件除了有数据内容之外,还有一部分信息用来描述文件例如:文件名,文件类型,文件大小等,它们并不作为文件的数据存在,我们把这部分信息视为文件的原信息。

树形结构和目录 

随着文件的数目越来越多,就要对文件进行系统管理。文件的管理按照树型结构来进行组织,这样,一种专门用来存放管理信息的特殊文件就诞生了,也就是我们平时所用的目录文件夹)的概念。

 ​

 

文件路径

操作系统,使用“路径” 这样的概念来描述一个具体文件的位置,形如:

使用路径,可以定位我们一个唯一的文件,从树型结构的角度看,树中的每一个结点,都被一条从根部开始(Windows系统从盘符开始),一级一级往下走,一直到当前结点,把中间经过的所有目录的名字都串起来,使用"/"或者"\"分割,就形成了路径。

1、绝对路径 

根节点出发(Windows从盘符开始),一层层最终到达目标文件。

2、相对路径

需要先指定一个“工作目录”,从当前目录出发,找到目标文件。

举个例子:

在我们当前路径下有一个test.txt文件。

那么它的绝对路径就是:C:\User\寻梦缘6\test.txt

假设工作目录为:C:\User

此时的相对路径为:./寻梦缘6/test.txt(此处的第一个.表示当前目录)

假设工作目录为:C:\User\寻梦缘6

此时的相对路径为:./test.txt

在User这个目录里还有一个寻梦缘7这个目录:

假设工作目录为:C:\User\寻梦缘7

此时的工作目录就应该为:../寻梦缘6/test.txt(此处的..表示上一级目录)

实际开发中,我们更多使用的是相对路径。 

操作系统中,分割了目录的各个部分,正统是使用“/”,后来有一个系统横空出世,叫做DOS(微软早期的成名战)

据说,DOS本身也是用“/”进行分割,但是临上线的时候,产品经理突然改需求了,非得用“\”来进行分割,结果改成“\”,用户都不买账,一顿喷!!!后来DOS就退而求其次,同时能够支持“/”和“\”了。我们现在的Windows是属于DOS的继任者,也就继承了上述设定。但是Linux这样的系统,都使用的是“/”。所以我们在此,尽量都写作“/”进行统一

写作“\”时,可能还需要转义字符进行转义,比如C语言时期的常见题:

拓展:everthing这个软件能够很快速地搜索出文件的路径,几乎都是秒出结果,比系统自带的搜索快多了。那everything为什么能这么快搜索到当前路径下的文件呢?核心思路:空间换时间。

everything中内置了一个小的数据库,会在安装好之后,把我们整个文件系统进行遍历,把信息都拿到之后,存储到内置的数据库中,后续我们使用everything的时候就不是去遍历了,而是直接去内置的数据库里面进行查询,而且everything还能感知到我们硬盘的变化,如:新建文件/删除文件/重命名,感知到这些变化后,就会去更新内置的数据库。而且everything扫描系统的时候,并非是扫描目录,而是用到了NTFS(Windows自带的文件系统)内置的索引信息。

文件重要分类

分类:1、文本文件    2、二进制文件

在学习C语言的时候,有fopen(“路径”打开方式),打开方式有rw/ra(按照文本文件的方式打开),rb/wb/ab(按照二进制文件的方式)。

那此时我们就会有疑问了?计算机的存储不都是二进制数字吗???

我们此处所说的“文本文件”是按照“文本”/字符串的方式来理解的(文本文件里面的二进制内容,都是表示的字符串),进一步的,我们可以认为,二进制文件中的内容,都是合法的字符。

那什么是合法的字符?我们在数据库的时候,曾经研究过一个东西——字符码表。英文字母,使用的是ASCLL码表,汉字,使用GBK/UTF8码表。文件中存储的数据都是在指定码表上有据可查的,就是合法字符,此时这个文件就是文本文件。

如何判定当前文件的种类呢?

这个时候,我们可以使用记事本来判定!!!使用记事本打开一个文件,如果我们看到的是正常的内容不是乱码,就说明这是文本文件;如果是乱码,就说明这是个二进制文件。

如图:

二进制文件:

文本文件: 

二进制文件:图片、音频 、可执行程序、动态库、.class……都属于二进制文件。

文本文件:文本文档、.c、.java、.cpp。

补充: word docx excel xlsx power point .pptx ==》 都是富文本(比普通文本,内容丰富的多)

相关文章:

  • leetcode hot100:三、解题思路大全:哈希(两数之和、字母异位词分组、最长连续序列)、双指针(移动零、盛最多水的容器、三数之和、接雨水)
  • 《C 语言 sizeof 与 strlen 深度对比:原理、差异与实战陷阱》
  • COMSOL软件入门
  • 爱普生Epson PX-S887打印机信息
  • 不同企业数字化转型补贴差异解析:政策导向下的分层激励模式
  • 从零开始的嵌入式学习day24
  • vmware虚拟机中安装win11系统
  • 开疆智能Profinet转RS485网关连接温度送变器配置案例
  • Ai学习之LangChain框架
  • 證券行業證券交易系統開發方案
  • 基于flask+vue的电影可视化与智能推荐系统
  • 小白入门FPGA设计,如何快速学习?
  • 05_核支持向量机
  • 知识体系_数据分析挖掘_基尼系数
  • 网页前端开发(基础)
  • 软考中级-软件设计师 UML图详解( 类图,对象图,用例图,序列图,通信图,状态图,活动图,构件图,部署图)
  • 面试算法刷题3(核心+acm)
  • 【typenum】 14 测试用例(build.rs)
  • SymPy|主元、重新表示、分数、约分表达式、极限、级数、ode、获取值、输出形式
  • 焊接结构动力疲劳计算
  • 深一度|有望冲击首轮秀?杨瀚森走出舒适圈站上大舞台
  • 歼-10CE首战大放异彩,聊聊中国战机海外实战的那些事儿
  • 中国华能:1-4月新能源装机突破1亿千瓦,利润总额再创新高
  • 照护者说|胡泳:向死而在,爱这个世界
  • 习近平向2025年上海合作组织减贫和可持续发展论坛致贺信
  • 国家话剧院上海演出季7月重启,《大宅门》等5部大戏来沪