2010-06-02 17 views
2

我对文件没有太多工作:我想知道在另一台计算机上访问远程文件时可能遇到的问题。如果远程应用程序崩溃并且不关闭文件会怎么样?我的目标是使用此win32函数: HFILE WINAPI OpenFile(LPCSTR lpFileName,LPOFSTRUCT lpReOpenBuff,UINT uStyle);如果远程应用程序崩溃或忘记关闭文件时文件保持打开状态,该怎么办

使用标志OF_SHARE_EXCLUSIVE可以确保任何并发访问都将被拒绝 (因为有多台机器不时向这个文件写入数据)。

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

回答

3

如果远程应用程序崩溃并且不关闭文件会怎么样?

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

这对于“挂起”应用程序(应用程序保持打开状态,但永远不会执行任何操作)无济于事。

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

它可能会更好,而不是使用文件的数据库引擎:因为数据库引擎是明确用来处理并发访问,锁定,超时等

2

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

您可以从www.sysinternals.com

关闭使用手柄工具,例如手柄首先确定该文件句柄ID我通过文件名的一部分。处理将展示给定的字符串的文件名的一部分匹配所有打开的文件:

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

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

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. 

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

相关问题