为什么Windows没有警告某些程序正在使用的文件?


5

在Windows上的记事本中打开文本文件时,可以将源文件移动到回收站,甚至可以永久删除它。写字板也是如此。为什么Windows没有给你一个警告,抱怨文件在另一个程序中打开?

但是,如果在Word中打开了相同的文件,并且您尝试将源文件移动到回收站或永久删除它,Windows会向您发出警告。消息本身可以是一种警告类型的消息,告诉您某些(通常是unknwon)程序打开了该文件。对于Windows 8.1上的Word 2013,这是一条信息消息,告诉您究竟哪个程序(Word)打开了该文件。

记事本档案 记事本打开文件

这是为什么?为什么A)在程序中打开时删除源文件,B)在文件删除后继续处理文档?为什么记事本和写字板中的行为与Word的行为不同?

单词del文件 word打开文件

第一个案例行为也存在于Paint中。您可以删除在Paint中打开的位图文件并继续工作。但是当您尝试保存它时,系统会提示您输入文件位置以保存它。使用记事本,它可以直接将其保存到与原始文件存储在同一位置,并为其指定相同名称。记事本不会提示您。

我没有在Windows 7,Vista或XP上测试过这个。但是,我希望行为完全相同,因此问题可能也适用于那些系统。


2
这是关于程序是否在编辑文件时保持文件打开的全部内容。他们经常不这样做; 他们将副本读入内存并在编辑时删除文件连接。当您去保存它时,它会创建一个到文件句柄的新连接。这取决于程序,而不是Windows。
Ƭᴇcʜιᴇ00714年

所以在这种情况下,Word保持原始文件打开; 记事本不?但是当您打开原始文件时,Word会生成隐藏的副本。作为某种临时文件。这不是Word保存更改的文件吗?然后在退出时,它将更改与原始文件合并并丢弃临时文件?如果是这样,应该可以在Word中打开时删除原始文件。
萨米尔2014年

这是因为Word正在尝试跟踪您(或任何人)正在编辑它时的更改,如果两个人进行了更改,然后将每个用户文件合并回来,则只有最后一个编辑器所做的更改才会保留。另一方面(例如)记事本并不关心。:)
Ƭᴇcʜιᴇ00714年

令我感到惊讶的是,记事本允许您在文件打开时删除或移动文件,但是应用程序控制它,并且在记事本的情况下,它是如此简单的程序,它不会尝试任何并发控制,并打开文件在读取模式下,然后加载它内存,释放读锁定。有关其他文件的更多信息,请参阅:superuser.com/questions/848782 / ...
Frank Thomas

所以Notepad应用了一个读锁定,然后在它加载到主存储器后立即释放它?那么这将允许所谓的“中断更新”?Word应用写锁定并仅在文件关闭后释放它?@FrankThomas感谢您的链接!那么Word 2013使用“交易”临时文件是真的吗?换句话说,它实际上对它所做的临时文件起作用,并且当保存更改时,它会删除原始文件,并将文档的当前状态保存在与原始文件同名的文件中?
萨米尔

Answers:


5

打开进行编辑时,并非所有程序都锁定文件

  • Windows有两种类型的文件锁,共享锁和独占锁。共享锁允许其他程序读取文件但拒绝对其他程序的写访问。独占锁会阻止其他程序完全访问该文件。程序可以根据需要使用任一类型的锁。

  • 程序可以“打开”文件进行编辑但不能锁定它们。这里真正发生的是文件被加载到内存中的缓冲区中,并且在再次操作之前不会检查文件的状态。以这种方式“打开”的文件并未真正使用,并且可以由其他程序或系统本身自由操作,这允许您继续编辑不存在的文件并将其保存到新文件中。

  • 记事本不会锁定打开的文件,这意味着该文件可以在记事本中打开时删除,并且程序在尝试再次打开文件之前不会注意到该文件已被删除。同样,Paint不会锁定文件,只会注意到文件在尝试打开或保存时会被删除。

  • 另一方面,Word会在文档打开时锁定文档(编辑:从我的研究中看,只有当Word正在读取或写入文件时,锁定才是独占的,否则就会共享)。因此,您无法删除当前在Word中打开的文件。

打开文件而不锁定它可能会有风险

  • 尽管将文件加载到内存中并且在必要时不触摸它是很简单的,但是这样做而不锁定它会带来竞争条件的风险,其中一个程序可以编辑文件而不会将更改反映在另一个问题中。其他程序(可能很好地是Notepad或Paint)将不会看到更改,并且当您在该程序中保存文件时它们将丢失。

  • 这种竞争条件的风险是Microsoft Word(和其他Office程序)在打开文件时锁定文件的原因。另一方面,作为替代解决方案的示例,Notepad ++不会锁定打开的文件,以便其他程序可以继续操作它们。但是,它会在用户检测到文件已更改或被删除时发出警告,询问用户是分别从磁盘重新加载文件还是关闭文件 - 这两个操作都会丢弃用户的更改。



0

这是因为有些程序会复制文件并打开该文件而不是原始文件。这样,您可以删除原始文件而不会出现错误,因为任何程序都没有使用它。


是的,所以我注意到了。打开时,Word会生成原始文件的临时副本。你是这个意思吗?但Word不允许我删除原始文件,即使它已创建临时副本。
萨米尔

我没有说任何特定的应用程序。如果你的意思是Word在打开文件时创建的隐藏文件,我猜这是用于自动备份的目的。它实际上打开了原始文件,因为正如您所提到的,当在Word中打开文件时,您无法删除该文件。
Behdad
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.