有一个我想要进入的文件,但每当我尝试打开它时,我收到消息“进程无法访问该文件,因为它正被另一个进程使用”。
好吧,我想要!那么,我该怎么做呢?
我一直在集思广益尝试一些方法,我希望能在其他方面得到一些意见,或者如果我的想法因某些原因不适合我的想法。
这些想法中的任何一个都可能需要数周时间。是否有人更有创意,可以想到另一种方式;或者更有知识并消除不切实际的想法?
答案 0 :(得分:1)
在Windows中,允许应用程序获得独占locks on files。当进程opens the file时,您指定的一件事是who else can access it while your process does(这些是.NET方法,但其他语言中存在等价物)。例如,Excel因打开文件时获得独占锁而臭名昭着。围绕它的方式通常是to find the offending process and kill it来打破锁定。 Unlocker是我最熟悉的应用程序。但是,如果该过程是系统进程,则可能无法将其终止。您必须重新启动才能重置锁定。
直接从另一个进程的内存中读取内存不太可靠。应用程序可能没有内存中的副本,可能没有完整的内存副本,可能没有一致的内存副本,并且可能没有与磁盘上的内容匹配的内存副本(如果他们正在编辑文档,例如)。
您的进程知道该文件已被锁定,因为当它尝试打开文件时,它会通过要求操作系统访问该文件来执行此操作。操作系统响应说“请求被拒绝。另一个进程打开并锁定此文件”。操作系统不会告诉您的进程文件打开的是什么进程,因为尝试打开文件不包括询问谁已打开文件。您的流程必须提出正确的问题才能获得您正在寻找的答案。
答案 1 :(得分:1)
Windows可让您在打开文件时指定共享模式。共享模式可能会阻止在打开文件时读取,写入或删除文件。如果您想允许同时读取访问权限,则在致电FILE_SHARE_READ
(http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx)时,应在dwShareMode
参数中添加CreateFile
。
换句话说,如果要启用对打开文件的并发访问,则必须首先修改文件的打开方式。
C和Java中的可移植标准库在打开文件时不提供设置共享模式的方法,但是它们在Windows上的常规实现将共享模式设置为READ + WRITE。