代码之家  ›  专栏  ›  技术社区  ›  Stephane Rolland

当远程应用程序崩溃或忘记关闭文件时,如果文件保持打开状态,该怎么办?

  •  2
  • Stephane Rolland  · 技术社区  · 16 年前

    我对文件没有做太多的工作:我想知道在另一台计算机上访问远程文件时可能出现的问题。如果远程应用程序崩溃而不关闭文件呢?

    我的目标是使用这个win32函数: hfile winapi openfile(lpcstr lpfilename,lpofstruct lpreopenbuff,uint ustyle);

    使用\share\u exclusive标志可以确保拒绝任何并发访问 (因为有几台机器不时地写入这个文件)。

    但是如果文件保持打开状态呢?(例如应用程序崩溃?) 如何使文件恢复正常?

    2 回复  |  直到 14 年前
        1
  •  3
  •   ChrisW    16 年前

    如果远程应用程序崩溃而不关闭文件呢?

    然后O/S应该在“崩溃”应用程序后清理文件时关闭该文件。

    对于一个“挂起”的应用程序(一个保持打开但永远不做任何事情的应用程序)来说,这没有帮助。

    我不知道网络访问有什么问题:例如,当客户机打开文件时,网络连接消失(或者客户机关闭或重新启动)。我想有超时可能最终关闭服务器上的文件,但我不知道。

    使用数据库引擎而不是文件可能更好:因为数据库引擎是为处理并发访问、锁定、超时等而显式构建的。

        2
  •  2
  •   RED SOFT ADAIR    15 年前

    我在使用vmware时遇到了同样的问题,当客户机上关闭文件时,vmware有时不会在主机上释放文件句柄。

    您可以使用www.sysinternals.com中的handle实用程序关闭此类句柄。

    首先确定文件句柄id我传递了文件名的一部分。句柄将显示给定字符串与部分文件名匹配的所有打开的文件:

    D:\sysinternals\>handle myfile
    deadhist.exe       pid: 744     3C8: D:\myfile.txt
    

    然后使用参数-c和-p关闭hanlde

    D:\sysinternals\>handle -c 3c8 -p 744
      3C8: File  (---)   D:\myfile.txt
    Close handle 3C8 in LOCKFILE.exe (PID 744)? (y/n) y
    
    Handle closed.
    

    句柄不关心保存文件句柄的应用程序。现在可以重新打开、删除、重命名等文件。