如果code.txt
(或任何文件)被编辑并保存,那么我对PC如何处理该过程有两个想法:
PC会
code.txt
完全删除并code.txt
从头开始制作新的(编辑版本)。PC编辑十六进制的部分
code.txt
。因此不会发生删除。
哪个想法代表计算机如何工作?
如果code.txt
(或任何文件)被编辑并保存,那么我对PC如何处理该过程有两个想法:
PC会code.txt
完全删除并code.txt
从头开始制作新的(编辑版本)。
PC编辑十六进制的部分code.txt
。因此不会发生删除。
哪个想法代表计算机如何工作?
Answers:
可能是-取决于所使用的文本编辑器。
“文本文件”的概念不是内置于计算机中的-每个操作系统可能会以不同方式管理文件,并且每个文本编辑器可能会以不同方式使用这些文件。
在实践中,您会发现具有两种机制的文本编辑器。实际上,所有操作系统都允许直接覆盖现有文件的内容,因此,诸如记事本之类的简单编辑器通常只要求操作系统直接将其写入原始文件即可,因为这是最容易实现的操作-但如果在写入过程中断电,则存在风险。因此,出于可靠性的考虑,许多编辑器故意将更新的数据保存到新文件中并删除原始文件。
(我认为就地更新在十六进制编辑器中更为常见,在十六进制编辑器中,大多数编辑不插入/删除字节,而仅更改现有位置,因此不需要完整的重写文件。)
甚至还有第三种操作模式–编辑器可能会首先制作旧文件的备份副本,然后直接将新数据写入文件中。
这也取决于其保持文件的文件系统。对于大多数传统的文件系统,如果程序要求写入现有文件,则文件系统将仅就地覆盖旧数据。
但是,某些文件系统确实可以在“写时复制”模式下工作,在该模式下,无论程序是否需要,任何新数据都会始终写入不同的位置。同样,这具有提高可靠性的可能优点,因为中断的更改可以完全恢复。
在某些文件系统(例如Btrfs或ext4)中,这是一项可选功能。在其他情况下(例如日志结构的文件系统),它是核心设计的一部分。
由于您正在谈论“保存文件”,因此不会在磁盘上就地编辑文件。
对于普通文件系统中的文件,有两点要考虑。有目录条目,然后磁盘上某处有实际的文件数据。
当您在普通编辑器中编辑文件时,它将文件数据加载到RAM中,并且任何编辑都将在该数据副本上进行。然后,当您保存文件时,基本上有两个选择:
选项1:重命名了原始文件,因此原始目录条目和原始数据都将保留在磁盘上。重命名例如可以将文件后缀更改为.bak
(.bak
通常删除任何先前的文件)。然后创建一个新文件,并将内存中的数据写入那里。
选项2:原始目录条目已修改,因此文件被截断为0个长度。磁盘上用于文件数据的区域将被标记为未使用,但是旧文件内容将保留在磁盘上,直到被覆盖。然后写入新数据。在这种情况下,保留目录条目,仅更改它指向的数据。
有几种可能的变体,一种常见的变体是,已编辑的数据会首先存储到临时文件中,因此,如果此时计算机崩溃,则原始文件可能不会被损坏。然后删除原始文件,并使用正确的名称重命名新文件。或者,可以在写入新文件之前删除原始文件。
因此,您的理论1接近大多数编辑者所做的事情。
然后是特殊情况。最明显的一个是磁盘编辑器,它允许直接在磁盘上读取和覆盖字节。另一个可能是数据库文件,其中记录的大小可能是固定的,因此覆盖记录很容易。但是不能将数据追加到文件的中间,因此在编辑文本文件或文件中间的数据长度通常会发生变化的任何其他文件时,这些技巧实际上无法使用。
因此,在某些情况下,您的理论2是可能的,但是普通的文本编辑器则不行。
从历史上看,驱动器直接由操作系统控制,而操作系统又由应用程序控制。在这种情况下,理论2是PC工作的主要方式。操作系统指定了放置数据的物理位置,并且可以完全控制此过程。结果,早期的文件系统有一个“坏扇区”表,因此,在丢失数据后,计算机可以告诉您数据已丢失,并将该扇区标记为无法使用,以避免更多数据丢失。磁盘扫描和碎片整理已成为日常工作。
但是,在世纪之交之后,我们搬到了LBA,因此现在的OS只需引用它要读取或写入的“逻辑”块。硬盘驱动器本身现在已经具有智能,可以在不注意到操作系统背后数据的情况下随机播放数据。这意味着更高的可靠性,因为可以将无法验证的扇区简单地移动到新的物理位置,而不会影响操作系统对数据所在位置的了解。
在现代硬件中,“拼盘”磁盘驱动器通常只会用新的传入数据覆盖以前的内容,并且在扇区看起来无法保留数据(扇区已损坏或磨损)时,可以选择重新映射LBA。“闪存”驱动器通常会擦除旧单元,然后将数据写入新单元,这一过程称为耗损均衡。
在这两种情况下,这都是可能的,因为总有未使用的容量超出报告值。与上个世纪的技术不太可靠的技术相比,这种超额配置可以使驱动器具有更长的使用寿命。LBA模式使物理介质可以从OS中提取出来,以便驱动器本身可以采取驱动器认为必要的任何措施来防止数据丢失。
在应用程序级别,您通常以“写入”模式打开文件,这会告诉操作系统清除文件(“删除”内容,而不是文件本身),然后写入新数据。所有这些都在操作系统级别进行缓冲,然后“丢弃”到驱动器,从而进行请求的更改。
有了这些信息,理论上至少在默认情况下会在应用程序编程级别上发生理论上的变化,至少在默认情况下是这样,因为还有一种“带有附加的写入”模式以避免清除文件内容。操作系统本身将提出要像理论2那样进行的更改,但将通过LBA进行抽象。然后,驱动器本身可能会完成理论1和理论2的混合工作。
是的 它很复杂,并且非常依赖于部分制造商/ OS-developer / application-developer。但是,所有这些复杂性旨在使数据存储更可靠,同时提高电源使用/电池寿命。
一般来说,计算机会将原始文件所在的内存分配为“已删除”,但这实际上意味着它不再显示在文件浏览器中,并且允许写入该文件的内存中的单元格将来会被覆盖。
至于是否将新文件写入同一位置,取决于许多因素,主要是您所使用的软件以及如何设计以利用内存。
希望这不是多余的,还有一些额外的信息/背景。
PC通常对文件的编辑方式没有太多控制权,而是由应用程序来完成。
有关某些应用如何处理编辑的一些示例:
记事本将整个文档加载到内存中,然后将整个内容保存到原始文档(或您指定的新文档)上。
几乎所有其他小型编辑器在编辑时都会保存一个“新”文件,然后将其复制到原始文档中,并在“保存”时将其删除。
您可能用来编辑书籍的大型文档编辑器往往会读取/修改文档的一部分,因为他们可以编辑比内存更大的文档。这些实际上可以编辑文档“就地”。他们可能会重写一页,而将其余部分保留下来。与允许这种行为的简单.txt文件相比,它们通常具有更复杂的索引磁盘表示形式。
大型编辑器也可能只是将带有“更新”的临时文件保存到原始文档中。完成最终保存后,它可以将它们全部合并并重新编写文档。
可以将大多数编辑器配置为不更改现有版本,并使用您的更改创建一个新版本(保留旧版本)。
关于您的“ PC”功能部分,某些操作系统会记住文件的每个版本,并始终创建一个新版本。这些天这很少见,但我记得旧的“小型计算机”(我们现在称为大型机),其中每个文件的末尾都有一个版本,例如“ File.text.1”,并且每次您添加该版本时编辑。这种行为最好适用于诸如磁带驱动器或CD rom之类的东西,在这些东西上覆盖旧版本是完全不切实际的。
2并非不可能,但是由于各种原因它是愚蠢的。
编写良好的文本文件编辑器将:
myfile.txt
,新的可能是myfile.txt.new
myfile.txt~
myfile.txt
如果在上述过程中计算机崩溃或磁盘上的空间不足,则不会出现旧文件和新文件都丢失或仅部分保存的情况。
高度取决于您的编辑器,基础软件/驱动程序,存储。
可以恢复,除非您将其永久删除。
您的问题(软件,硬件等)中缺少信息,所以除了自己回答我,我将帮助您自己回答问题。
它取决于几个因素:
编辑器:如果编辑器软件替换了同一文件的块,则可能会被重写。并且这也可能取决于编辑器设置和文件类型。请注意,该词可能用斜体表示。即使编辑器重写了文件,它仍然可以保持不变(请阅读下一点)。
底层软件/驱动程序/文件系统:如果下面有其他软件/驱动程序可以防止原始文件被覆盖,则文件将保持不变。这些类型的软件包括版本控制系统,虚拟差异磁盘和某些备份软件。Git是一个示例,它将保留原始文件块,并创建包含修改后的块的新文件。
储存方式:
存储本身可以在新扇区上写入更改的块,并将旧块标记为“空闲”。然后,该文件将物理保留在存储中(并且可以恢复),除非它被其他文件覆盖。现代SSD存储就是一个例子,它可以在硬件级别实现。
即使数据被覆盖,也有一些方法可以从典型的机械HDD磁盘中恢复数据。并且其中有专门的公司。
因此,如果您想获得具体的答案,无论是否删除文件,还必须告诉您使用的编辑器,备份/ VCS软件/硬件和存储。如果有任何遗漏,请随时编辑答案。
这可能是您要问自己的下一个问题。嗯,有许多软件/硬件解决方案。由于SuperUser并非用于推广软件/硬件,因此我不告诉名称,而是告诉您如何查找它们:搜索关键字“ permanently delete file”。有关更精确的匹配项,请提及您的操作系统,硬盘驱动器类型或其他信息。
尚未有人提到的与某些版本的MS Windows操作系统有关的行为也与使用中的文件系统有关。
行为是这样的:重命名或删除文件时,如果在删除(或重命名)原始文件后的15秒内创建(重新创建)具有相同名称的(新)文件,则创建日期/时间戳是从原始文件复制的。本质上,新文件“成为”旧/原始文件。
在这种情况下,应用程序是通过方法1:使用相同名称创建新文件,还是方法2:在适当位置编辑/更新文件(文件未删除)。无论哪种方式,最终文件都会(几乎)像原始文件一样进入所有位置。唯一的是,它可能会占用不同的物理驱动器空间(群集/扇区),并且文件的目录条目可能会位于不同的位置。
正如我所说,这是某些版本的MS Windows /文件系统的行为。我不知道它是从哪个版本的Windows和哪个文件系统开始的,是否仍然是更新版本的行为。如果我不得不猜测,我会说它是在Windows NT和Windows XP上引入的,并且仍然是Windows 10的行为,并且(仍然是猜测),这种行为需要Fat32或NTFS(也许是更新的)文件系统。