Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 当远程应用程序崩溃或忘记关闭文件时,如果文件保持打开状态,该怎么办_Winapi_File - Fatal编程技术网

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

Winapi 当远程应用程序崩溃或忘记关闭文件时,如果文件保持打开状态,该怎么办,winapi,file,Winapi,File,我没有在文件方面做过这么多工作:我想知道在另一台计算机上访问远程文件可能会出现什么问题。如果远程应用程序崩溃并且没有关闭文件怎么办 我的目标是使用此win32函数: HFILE WINAPI OpenFileLPCSTR lpFileName,LPOFSTRUCT lpreseponbuff,UINT uStyle 使用_SHARE_EXCLUSIVE标志可以确保任何并发访问都将被拒绝 因为有几台机器不时地向这个文件写入数据 但是,如果文件保持打开状态,该怎么办?例如,应用程序崩溃? 如何使文件

我没有在文件方面做过这么多工作:我想知道在另一台计算机上访问远程文件可能会出现什么问题。如果远程应用程序崩溃并且没有关闭文件怎么办

我的目标是使用此win32函数: HFILE WINAPI OpenFileLPCSTR lpFileName,LPOFSTRUCT lpreseponbuff,UINT uStyle

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

但是,如果文件保持打开状态,该怎么办?例如,应用程序崩溃? 如何使文件恢复正常

如果远程应用程序崩溃并且没有关闭文件怎么办

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

这对挂起的应用程序没有帮助—一个保持打开但永远不做任何事情的应用程序

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


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

我在使用VMware时遇到了同样的问题,VMware有时在主机上关闭文件时不释放文件句柄

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

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

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.
句柄不关心持有文件句柄的应用程序。您现在可以重新打开、删除、重命名文件等