代码之家  ›  专栏  ›  技术社区  ›  user24881

如何在Windows上使用Perl检测打开的文件句柄的文件是否已被删除?

  •  3
  • user24881  · 技术社区  · 15 年前

    我有一个打开文件句柄的进程。我需要检测此文件是否已被其他进程删除(可能存在同名文件)。在UNIX上,我通过stat比较了filehandle的inode和文件路径,但这在Win32上不起作用。如何在Perl中实现这一点?

    谢谢
    -彼得

    4 回复  |  直到 15 年前
        1
  •  7
  •   Leon Timmermans    15 年前

    我可能弄错了(我不是Windows程序员),但我认为在Win32中打开文件时不能删除或替换它们,或者至少在默认情况下是不可能的。

        2
  •  2
  •   Schwern    15 年前

    这是一个很难解决的问题,尤其是在Windows和Unix上。

        3
  •  1
  •   chaos    15 年前

    我会尝试比较大小、mtime和atime;对于那些人来说,保持一致应该是非常困难的(除非是胡说八道,比如说,win32上的文件句柄上的stat为您提供文件系统中当前文件的信息,而不管您的文件句柄是否在已删除的实例上)。如果您的文件可能在给定的一秒钟内被删除并替换为相同的文件多次,并且您必须检测到这一点,那么您可能必须使用体系结构解决方案,例如使用文件的编号版本或其他内容。

        4
  •  1
  •   Rob K    15 年前

    查看Win32::ChangeNotify包以注册文件或目录更改通知。还可以通过Win32API::file包打开该文件,以便在打开时无法删除它(具体请参见createFile()和OsFHandleOpen(),以及MSDN上的createFile()文档)。