文件操作和IO(1)

认识文件

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

注意:硬盘 != 磁盘

磁盘属于外存的一种.

而硬盘分为机械硬盘和固态硬盘.

机械硬盘:磁性介质存储二进制数据.

固态硬盘:内部为集成电路,和磁性介质无关. -> 优势:读写速度快了很多.

 如上图就是磁盘,类似一个碟片机的东西.上面那个尖叫做磁头(很细的针头,能感知磁性的变化,磁头悬停在盘片不同位置可以进行读取),圆的是盘片,可以高速旋转以让磁头读取.

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

树形结构组织和目录

同时,随着文件越来越多,对文件的系统管理也被提上了日程,如何进行文件的组织呢?就是按照层级结构进行组织-也就是我们数据结构中学习过的树形结构.这样,一种专门用来存放管理信息的特殊文件产生了,也就是我们平时所谓文件夹或者目录的概念. 

 

 

文件路径

如何在文件系统中定位我们的一个唯一的文件就成为当前要解决的问题,这难不倒计算机科学家,因为从树形结构的角度来看,树中每个结点都可以被一条从根开始,一直到达所有结点的路径所描述,而这种描述方式就被称为文件的绝对路径.(可以想象成哈希表结构,每一个目录中,可根据名字非常快速地找到子元素

 

 除了可以从根开始进行路径的描述,我们可以从任意结点出发,进行路径的描述,而这种描述方式被称为相对路径,相当于当前所在结点的一条路径.

eg.在C:\Users\1\test.txt这条路径中找test.txt.

如果当前目录为C:\Users\1

相对路径: ./test.txt   (.表示当前目录)

当前目录为C:\Users

相对路径: ./1/test.txt

当前是C:\Users\1\AppData

相对路径: ../test.txt  (..表示上层目录)

在实际开发中用的更多是相对路径.

其它知识

即使是普通文件,根据其保存数据的不同,也经常被分为不同类型,我们一般简单的划分为文本文件和二进制文件,分别指代保存被字符集编码的文本和按照标准格式保存的非被字符集编码过的文件.

给定一个文件如何判断是文本二进制 ->用记事本判定

使用记事本打开,如果是正常内容 -> 文本文件, 乱码 -> 二进制文件

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

文本文档,.c,.java,.cpp为文本文件

还有一种富文本文件,譬如word,docx都为富文本文件 

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

 

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

 

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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/337720.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1885_Arduino 1306 OLED屏幕的使用

全部学习汇总: g_arduino: Arduino hack笔记 (gitee.com) 以前我基于Arduino做过一个环境信息采集的小工具,采集到的信息存储到SD卡中。当时的笔记: 341_Arduinopython分析天气变化导致颈椎病发的原因_颈椎病相关数据分析python-CSDN博客 以前…

Jan AI本地运行揭秘:首次体验,尝鲜科技前沿

🌟🌌 欢迎来到知识与创意的殿堂 — 远见阁小民的世界!🚀 🌟🧭 在这里,我们一起探索技术的奥秘,一起在知识的海洋中遨游。 🌟🧭 在这里,每个错误都…

关于Hive架构原理,尚硅谷

最近学习hive 时候,在做一个实操案例,具体大概是这样子的: 我在dataGip里建了一个表,然后在hadoop集群创建一个文本文件里面存储了数据库表的数据信息,然后把他上传到hdfs后,dataGrip那个表也同步了我上传到…

gin渲染篇

1. 各种数据格式的响应 json、结构体、XML、YAML类似于java的properties、ProtoBuf package mainimport ("github.com/gin-gonic/gin""github.com/gin-gonic/gin/testdata/protoexample" )// 多种响应方式 func main() {// 1.创建路由// 默认使用了2个中…

java idea 中的 Scratches and Consoles

IDEA 中,"Scratches and Consoles" 是一个用于临时代码编辑和交互式开发的工具窗口,作用如下:Scratches(草稿):Scratches 是一个用于临时编写和运行代码片段的工具,你可以在其中创建临…

四.Winform使用Webview2加载本地HTML页面并互相通信

Winform使用Webview2加载本地HTML页面并互相通信 往期目录本节目标核心代码实现HTML代码实现的窗体Demo2代码效果图 往期目录 往期相关文章目录 专栏目录 本节目标 实现刷新按钮点击 C# winform按钮可以调用C# winform代码显示到html上点击HTML按钮可以调用C# winform代码更…

2024首更---Web Service 教程

Web Services 简介 Web Services 可使您的应用程序成为 Web 应用程序。 Web Services 通过 Web 进行发布、查找和使用。 您应当具备的基础知识 在继续学习之前,您需要对下面的知识有基本的了解: HTMLXML 如果您希望首先学习这些项目,请在…

万户 ezOFFICE wf_process_attrelate_aiframe.jsp SQL注入漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

lv14 信号量、互斥锁、并发控制机制选择

1 信号量:基于阻塞的并发控制机制 a.定义信号量 struct semaphore sem; b.初始化信号量 void sema_init(struct semaphore *sem, int val); c.获得信号量P int down(struct semaphore *sem);//深度睡眠 int down_interruptible(struct semaphore *sem);//浅度…

【Linux】python版本控制

文章目录 1.查看目前python的版本2.添加软件源并更新3.选择你想要下载的版本4.警示:没必要设置默认版本误区千万千万不要覆盖python3软链接解决办法 5.安装pip换源 6.环境管理 网上有很多教程都是教导小白去官方下载之后编译安装。但是,小白连cmake是什么…

【JavaEE】CAS

作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…

使用xbindkeys设置鼠标侧键

1.安装如下包 sudo apt install xbindkeys xautomation 2.生成配置文件 xbindkeys --defaults > $HOME/.xbindkeysrc 3.确定侧键键号 在终端执行下面的代码: xev | grep button 此时会出现如下窗口,将鼠标指针移动到这个窗口上: 单…

原生微信小程AR序实现模型动画播放只播放一次,且停留在最后一秒

1.效果展示 0868d9b9f56517a9a07dfc180cddecb2 2.微信小程序AR是2023年初发布,还有很多问提(比如glb模型不能直接播放最后一帧;AR识别不了金属、玻璃材质的模型等…有问题解决了的小伙伴记得告诉我一声) 微信官方文档地址 3.代码…

kotlin $ (字符串模版)的使用

$ 在kotlin 中当做字符串模版使用,作用就是在字符串里面识别自己定义的字符 例如打印一个字符 这个时候编译就提示我们使用字符串模版的是个 $ 的作用就是识别字符串里面的i 字数有点少了,在写一个demo private fun String.appendArchive(): String …

AI日报:扎克伯格瞄准AGI通用人工智能

文章目录 Meta瞄准通用人工智能领域Meta的目标Meta的产品 FAIR移动和装载H100扎克伯格对人工智能竞争对手的真实动机持怀疑态度Meta抛弃了元宇宙吗? Meta瞄准通用人工智能领域 Meta首席执行官马克扎克伯格(Mark Zuckerberg)在一份可能改变全…

QT+opencv源码编译

时间记录:2024/1/20 一、版本介绍 QT5.12.7cmake3.22.0opencv4.5.4 二、编译步骤 (1)下载opencv源码,然后安装,opencv的安装即对源码的解压过程,解压后的文件目录如下 (2)openc…

硬件---关于 埋孔、盲孔、通孔的介绍

简介 埋孔、盲孔、通孔 都是应用于PCB不同板层之间的换层。 简单区分: 埋孔: 藏在里面,从上往下或者从下往上都看不见; 盲孔:从表面看有个孔,但是看不见底; 通孔:从表面看底是穿的…

保姆级最新版Kali虚拟机安装和汉化中文教程

Kali虚拟机简介 Kali虚拟机是一款基于Debian的Linux发行版虚拟机操作系统,专为安全渗透测试和数字取证而设计。该虚拟机预装了许多渗透测试软件,包括Metasploit、BurpSuite、sqlmap、nmap以及Cobalt Strike等,这些工具都是为了进行网络安全测…

第十回 朱贵水亭施号箭 林冲雪夜上梁山-FreeBSD/Linux 控制台基础操作

林冲被众庄客捉住,吊在门楼下,正被打时,柴进来了,赶快把林冲救下来。原来这是柴进打猎用的小庄子, 林冲就把火烧草料场一事跟柴进详细的说了。柴进说兄弟真是命运多磨难啊。林冲住了几日,恐怕连累柴进&…

基于 OpenVINO, yolov5 推理

OpenVINO 是英特尔开发的一款功能强大的深度学习工具包,可实现跨多个硬件平台的优化神经网络推理。在本文中,我们讨论了 OpenVINO 的特性和优势,以及它如何与领先的计算机视觉平台 Viso Suite 集成,以构建和交付可扩展的应用程序。…