如何在Windows下确定删除文件(文件锁的问题)?

时间:2011-03-11 10:27:52

标签: c++ windows

有没有办法删除windows xp,ntfs文件系统下的文件,即使该文件有锁定?

遇到其他流程的问题,例如病毒扫描锁定文件我要移动/删除。

感谢任何提示!

4 个答案:

答案 0 :(得分:4)

MoveFileEx允许您传递MOVEFILE_DELAY_UNTIL_REBOOT,这将导致您在下次重新启动时移动/删除文件。除此之外,您必须找到/杀死当前锁定文件的其他进程,这可能是不可能的,对于大多数程序来说几乎肯定不是理想的行为。

答案 1 :(得分:2)

如果在尝试删除文件时文件被锁定,则删除将失败。如果您需要删除该文件,则需要锁定它的任何内容以释放锁定。

这就是它的全部内容。这里没有捷径。

答案 2 :(得分:1)

如果我没记错,可以下载一个名为Open Handles的Microsoft程序,它可以告诉您锁定特定文件的进程。然后,您只需终止该进程并解锁文件,以便删除它。如果文件被核心操作系统进程锁定,则不起作用,但如果被病毒扫描程序锁定则应该正常工作。

我想如果您尝试以编程方式而不是手动方式执行此操作,则需要让程序调用oh.exe并相应地处理其输出。然后使用Windows API终止相关进程(据我所知,TerminateProcess是相应的函数)并尝试再次删除该文件。

答案 3 :(得分:0)

如果您在继续操作之前绝对需要删除该文件,则可以执行以下操作:

#include <stdio.h>
...
while(remove("myfile.txt" ) != 0)
   // Error deleting file. Wait a little before trying again.
   Sleep(100);

循环后,您绝对确定该文件已成功删除 你可以使用一些“尝试计数器”来退出循环而不是永远等待;)