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

Sam*_*mir 5 windows file-management

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

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

记事本del文件 记事本打开文件

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

单词删除文件 word打开文件

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

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

bwD*_*aco 5

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

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

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

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

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

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

  • 尽管将文件加载到内存中很简单,除非需要,否则不要触摸它,但这样做不锁定它会带来竞争条件的风险,其中一个程序可能会编辑文件而更改不会反映在另一个问题中。其他程序(很可能是记事本或画图)将看不到更改,当您将文件保存在该程序中时,这些更改将丢失。

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