首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当远程应用程序崩溃或忘记关闭文件时,如果文件保持打开状态,该如何处理

当远程应用程序崩溃或忘记关闭文件时,如果文件保持打开状态,该如何处理
EN

Stack Overflow用户
提问于 2010-06-02 21:00:59
回答 2查看 483关注 0票数 2

我没有处理过太多的文件:我想知道访问另一台计算机上的远程文件可能会出现的问题。如果远程应用程序崩溃而没有关闭文件怎么办?

我的目标是使用这个win32函数: HFILE WINAPI OpenFile(LPCSTR lpFileName,LPOFSTRUCT lpReOpenBuff,UINT uStyle);

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-02 21:16:00

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

然后,操作系统应该在“崩溃”的应用程序后清理文件时关闭该文件。

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2010-09-07 15:54:47

我在使用VMware时遇到了同样的问题,当关闭来宾系统上的文件时,它有时不会释放主机上的文件句柄。

您可以使用www.sysinternals.com中的句柄实用程序关闭这些句柄

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

代码语言:javascript
复制
D:\sysinternals\>handle myfile
deadhist.exe       pid: 744     3C8: D:\myfile.txt

然后使用参数-c和-p关闭处理程序

代码语言:javascript
复制
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并不关心持有文件句柄的应用程序。您现在可以重新打开、删除、重命名等文件

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2957855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档