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

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

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

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

记事本删除文件 记事本打开文件

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

word 删除文件 word打开文件

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

我还没有在 Windows 7、Vista 或 XP 上测试过。不过,我预计行为会完全相同,因此这个问题可能也适用于这些系统。

答案1

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

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

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

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

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

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

  • 尽管将文件加载到内存中并在必要时才对其进行操作很简单,如果不锁定,则存在竞争条件其中一个程序可能会编辑文件,而更改不会反映在另一个问题中。另一个程序(很可能是记事本或画图)将看不到更改,当您在该程序中保存文件时,更改将会丢失。

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

答案2

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

相关内容