2011-03-11 59 views

回答

4

MoveFileEx允許您傳遞MOVEFILE_DELAY_UNTIL_REBOOT,這將導致文件在下次重新啓動時被移動/刪除。除此之外,你必須找到/殺死當前有其他進程鎖定文件,這可能是不可能的,並且對於大多數程序來說幾乎肯定不是所希望的行爲。

+0

感謝您的回答。不幸的是,在我的情況下重新啓動是不可能的... – nabulke 2011-03-11 10:32:59

+1

@nabulke - 不幸的是,不知道更多,很難知道建議。你的程序與其他程序鎖定文件有什麼關係?如果答案是「無」,那麼你有什麼權利打破其他程序持有的鎖? – 2011-03-11 10:36:18

0

如果您確實需要刪除繼續之前的文件,你可以這樣做以下:

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

你絕對確保文件被成功刪除循環後。
您可能會使用一些「企圖計數器」退出循環而不會永遠等待;)

2

如果文件在您嘗試刪除時被鎖定,則刪除將失敗。如果你需要刪除文件,那麼你需要鎖定它來釋放鎖。

這就是它的全部。這裏沒有捷徑。

1

如果我記得沒錯,有一個叫做Open Handles的微軟程序,你可以下載它,它會告訴你哪個進程正在鎖定一個特定的文件。然後,您只需要殺死該進程並將其解鎖即可將其刪除。如果文件被核心操作系統進程鎖定,則不起作用,但如果它被病毒掃描程序鎖定,則應該正常工作。

我想如果你試圖以編程方式而不是手動方式來做到這一點,你需要讓你的程序調用oh.exe並相應地處理它的輸出。然後使用Windows API殺死相關進程(據我所知,TerminateProcess是合適的功能)並嘗試再次刪除文件。

+0

還有一個不錯的工具叫做解鎖器,它也是這樣做的。 – nabulke 2011-03-11 12:17:06

+1

當然,沒有一個健全的病毒掃描器會讓自己像那樣被殺死。 – MSalters 2011-03-11 12:45:49