有沒有辦法在windows xp,ntfs文件系統下刪除文件,即使該文件存在鎖定?如何在windows下確實刪除一個文件(文件鎖定問題)?
與其他進程有問題,例如,病毒掃描鎖定文件我想要移動/刪除。
感謝您的任何提示!
有沒有辦法在windows xp,ntfs文件系統下刪除文件,即使該文件存在鎖定?如何在windows下確實刪除一個文件(文件鎖定問題)?
與其他進程有問題,例如,病毒掃描鎖定文件我想要移動/刪除。
感謝您的任何提示!
MoveFileEx允許您傳遞MOVEFILE_DELAY_UNTIL_REBOOT,這將導致文件在下次重新啓動時被移動/刪除。除此之外,你必須找到/殺死當前有其他進程鎖定文件,這可能是不可能的,並且對於大多數程序來說幾乎肯定不是所希望的行爲。
如果您確實需要刪除繼續之前的文件,你可以這樣做以下:
#include <stdio.h>
...
while(remove("myfile.txt") != 0)
// Error deleting file. Wait a little before trying again.
Sleep(100);
你絕對確保文件被成功刪除循環後。
您可能會使用一些「企圖計數器」退出循環而不會永遠等待;)
如果文件在您嘗試刪除時被鎖定,則刪除將失敗。如果你需要刪除文件,那麼你需要鎖定它來釋放鎖。
這就是它的全部。這裏沒有捷徑。
如果我記得沒錯,有一個叫做Open Handles的微軟程序,你可以下載它,它會告訴你哪個進程正在鎖定一個特定的文件。然後,您只需要殺死該進程並將其解鎖即可將其刪除。如果文件被核心操作系統進程鎖定,則不起作用,但如果它被病毒掃描程序鎖定,則應該正常工作。
我想如果你試圖以編程方式而不是手動方式來做到這一點,你需要讓你的程序調用oh.exe並相應地處理它的輸出。然後使用Windows API殺死相關進程(據我所知,TerminateProcess
是合適的功能)並嘗試再次刪除文件。
感謝您的回答。不幸的是,在我的情況下重新啓動是不可能的... – nabulke 2011-03-11 10:32:59
@nabulke - 不幸的是,不知道更多,很難知道建議。你的程序與其他程序鎖定文件有什麼關係?如果答案是「無」,那麼你有什麼權利打破其他程序持有的鎖? – 2011-03-11 10:36:18