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

文件操作和 IO

认识文件

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

计算机中存储数据的设备:

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

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

文件除了有数据内容之外,还有一部分信息,例如文件名,文件类型,文件大小等并不作为文件的数据而存在,我们把这部分信息可以视为文件的元信息。

树型结构和目录

文件的数目越来越多,也就要对文件进行系统管理。==》 按照层级结构来及逆行组织 ==》树型结构。这样,一种专门用来存放管理信息的特殊文件就诞生了,也就是我们平时的文件夹(folder)或者目录(directory)的概念

文件路径(Path)

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

使用路径的概念,可以定位我们唯一的一个文件,从树型结构的角度看,树中的每一个结点,都可以被一条从根部开始(windows 是从盘符出发),一级一级的往下走,一直到达结点,把中间经过的所有的目录的名字都串起来,使用 / 或者 \ 分割,此处就构成了“路径”。

路径有两种不同的风格

1. 绝对路径

指的就是从根结点出发(Windows 是盘符),一层一层最终到达目标文件。

2. 相对路径

先指定一个“当前目录” / “工作目录” / “基准目录”,从当前目录出发,找到目标文件

举个栗子:

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

操作系统中,分割目录的各个部分,正统是使用 / (上古时期的知名操作系统就是 / )

后来有一个系统横空出世,叫做 DOS (微软早期的成名战)

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

(写作 \ 的时候,还需要转义字符转义,比如 C 语言时候的常见考题:

拓展:everything 不知道大家是否用过???就是用这个软件,搜索文件,会非常非常快,几乎是秒出结果,比此电脑自带的那个搜索快了许多~~~ 那 everything 是怎么实现的呢???

核心思路是:“空间换时间”

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

文件重要分类

分为:文本文件 和 二进制文件,(在学习 C 语言的时候,有 fopen("路径",打开方式),其中打开方式有,r w a(按照文本文件的方式打开);rb wb ab(按照二进制文件的方式打开))

但有个疑问是,计算机的存储,归根结底都是二进制的形式呀。。。

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

那什么是合法的字符呢??? ==》我们在数据库的时候,曾经研究过一个东西叫字符码表。普通的英文字母,使用 ASCII 码表,汉字,使用 GBK / UTF8 码表。(无论是那种方式,都会有一个“码表”)文件中存储的数据都是在指定码表上有据可查的,那就是合法的字符,此时这个文件就是文本文件~~~

那,给我们一个文件,如何判定是文本文件,还是二进制文件呢???(文本文件和二进制文件,在代码操作的方式上是有一定差别的~~~ 如上文,文件中存储的数据都是在指定码表上有据可查的,就是文本文件,二进制文件是无据可查的~~~)

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

图片,音频,视频,可执行程序,动态库,.class ...都属于是二进制文件

文本文档,.c .java .cpp 都是文本文件

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

其他知识

Windows 操作系统上,会按照文件名中的后缀来确定文件类型以及该类型的文件的默认打开程序。但这个习俗也并不是通用的,在 OSX Unix Linux 等操作系统中,就没有这样的习惯,一般不对文件类型做如此精确的分类

文件由于被操作系统进行了管理,所以根据不同的用户,会赋予用户不同的对待文件的权限,一般可以认为有 可读 可写  可执行 权限。

Windows 操作系统上,还有一类文件比较特殊,也就是我们平时看到的快捷方式(shortcut),这种文件只是对真实文件的一种引用而已。其他操作系统上也有类似的概念,例如,软链接(soft link) 等等...

最后,很多操作系统为了实现接口的统一性,将所有的 I / O 设备都抽象成了文件的概念,使用这一理念最为知名的就是 Unix,Linux 操作系统 --> 万物皆文件

完!

相关文章:

  • 数字人文字转语音-TTS--局域网共用一个数字人平台部署 模型存储更改TTS_HOME
  • 【HD-RK3576-PI】Linux制作deb包的方法
  • STM32 HAL库之GPIO示例代码
  • YSlow使用指南
  • FreeRTOS使任务处于阻塞态的API
  • jvm内存如何调优
  • UWB双通道隧道人员定位方案
  • KWDB创作者计划—KWDB:国产分布式多模数据库的创新实践
  • java爬虫案例
  • JAVA SE 自我总结
  • React useEffect
  • 虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解?
  • 双数之和+三数之和+四数之和
  • CyclicBarrier 基本用法
  • 【JS进阶】对象解构与数组解构
  • 基于3A4000及CentOS的银河麒麟V10离线源码编译安装VLC
  • Java八股文背诵 第四天JVM
  • BC3 有容乃大(sizeof关键字,sizeof(long long) >= sizeof(long) >= sizeof(int)
  • Spring 中的 @Cacheable 缓存注解
  • Hook_Unfinished
  • 苏州市工业园区规划建设局网站/怎么把平台推广出去
  • 无锡网站建设多少钱/种子搜索引擎
  • 为耐克做品牌推广的网站/互联网广告代理可靠吗
  • 微信系统平台开发/郑州seo优化哪家好
  • 工信部网站 登陆/成都网站seo技巧
  • 青岛市网站制作/网站搜索排名