代码之家  ›  专栏  ›  技术社区  ›  Marco Mariani

我们能在Windows中删除一个打开的文件吗?

  •  14
  • Marco Mariani  · 技术社区  · 15 年前

    Windows有这个“不错”的特性,它拒绝删除任何进程打开的任何文件。因此,如果一个防病毒软件在错误的时间命中错误的文件,一些随机程序可能会出现错误行为,甚至崩溃。

    我说得对吗?有计划解决这个问题吗?

    你们中有人认为这是可以接受的吗?或者,这在当时怎么可能是个好主意?

    例如:

    • 进程1打开foo.txt,用于读或写,或者两者都打开,这无关紧要
    • 进程2删除文件
    • 文件与文件系统解除链接
    • 进程1继续读和/或写,文件仍然存在,只要磁盘上有空间,它就可以增长。它只是无法从其他还没有文件句柄的进程访问。
    • 当进程1关闭文件时,将无法从任何地方访问它

    2 回复  |  直到 15 年前
        1
  •  6
  •   mafu    13 年前

    你最初的陈述不正确。Windows不允许删除打开的文件。您只需指定FILE\u SHARE\u DELETE就可以了。细心的程序员应该明智地决定这个标志(或读/写共享)是否有意义并传递它。

        2
  •  -1
  •   Daniel T.    15 年前

    这是完全可以接受的。想象一下这样一种情况:您正在应用程序中读取一个数据库文件,而另一个应用程序出现并从您的正下方删除了该数据库文件。应用程序如何知道检查文件是否仍然存在?它将如何确保文件流不会突然尝试读取文件,该文件可能存在一毫秒,但不是下一毫秒?这就是为什么程序可以锁定文件,以确保文件始终在那里,直到程序确定它已经完成。