我没有处理过太多的文件:我想知道访问另一台计算机上的远程文件可能会出现的问题。如果远程应用程序崩溃而没有关闭文件怎么办?
我的目标是使用这个win32函数: HFILE WINAPI OpenFile(LPCSTR lpFileName,LPOFSTRUCT lpReOpenBuff,UINT uStyle);
使用标志OF_SHARE_EXCLUSIVE向我保证,任何并发访问都将被拒绝(因为有几台机器时不时地向这个文件写入数据)。
但是,如果文件保持打开状态怎么办?(例如,应用程序崩溃?)如何将文件恢复正常?
发布于 2010-06-02 21:16:00
如果远程应用程序崩溃并且没有关闭文件怎么办?
然后,操作系统应该在“崩溃”的应用程序后清理文件时关闭该文件。
这对“挂起”的应用程序(保持打开但永远不做任何事情的应用程序)没有帮助。
我不知道网络访问的问题是什么:例如,当客户端打开文件时,网络连接是否消失(或者客户端机器关闭或重新启动)。我猜可能会有超时,最终可能会关闭服务器上的文件,但我不知道。
使用数据库引擎可能比使用文件更好:因为数据库引擎是显式构建的,用于处理并发访问、锁定、超时等。
发布于 2010-09-07 15:54:47
我在使用VMware时遇到了同样的问题,当关闭来宾系统上的文件时,它有时不会释放主机上的文件句柄。
您可以使用www.sysinternals.com中的句柄实用程序关闭这些句柄
首先确定文件句柄id,传递文件名的一部分。handle将显示所有打开的文件,其中给定的字符串与文件名的一部分匹配:
D:\sysinternals\>handle myfile
deadhist.exe pid: 744 3C8: D:\myfile.txt然后使用参数-c和-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.handle并不关心持有文件句柄的应用程序。您现在可以重新打开、删除、重命名等文件
https://stackoverflow.com/questions/2957855
复制相似问题