2013-11-04 45 views
-2

我想找到某種方式來刪除文件。有些文件不能通過刪除命令以簡單的方式刪除。如惡意軟件或打開的文件。有沒有可以強制刪除的命令?如何強制刪除文件

+1

簡短回答:本地和跨平臺的智慧,使用C++以外的其他東西可能更好。 – jrd1

+1

你應該看看boost :: filesystem庫。它可以刪除文件,並有一個合理簡潔的界面。 http://www.boost.org/doc/libs/1_48_0/libs/filesystem/v3/doc/reference.html。如果您在嘗試時遇到問題,請發佈您已完成的操作,然後Stack Overflow可以幫助您。 – NicholasM

+0

我想沒有人問過什麼操作系統,因爲只有一個具有惡意軟件,並限制刪除打開的文件,這有助於它鞏固。 – Potatoswatter

回答

1

在Windows中,除非先關閉文件,否則無法刪除當前打開的文件(包括由操作系統作爲執行的一部分保持打開的可執行文件,對於當前加載的DLL和驅動程序也是如此)在可執行文件的情況下,如果沒有嚴重的欺騙和「欺騙操作系統」[例如關閉驅動程序中的文件,該文件最初未被該驅動程序打開],則不可能)。

大多數真實應用程序(例如安裝程序)解決此問題的方法是將文件的刪除添加到在關機或啓動時運行的某些內容,然後要求用戶重新啓動計算機。 [這也適用於使用新文件複製舊文件,這在安裝軟件時更爲常見]。

在Unix/Linux環境中,只要您有足夠的權限來刪除文件,就可以將其刪除,但是如果文件處於打開狀態,它將不會被「真正刪除」,直到它被關閉。這在大多數情況下可能沒有太大的影響,但是例如說一些長期運行的程序正在生成巨大的日誌文件,那麼您實際上無法通過刪除文件來釋放磁盤空間 - 只有在文件釋放後才能釋放磁盤空間關閉了。重新啓動長時間運行的程序是一種解決方案,但是如果您剛剛計算出PI的大量小數,並且想繼續運行,則可能不是解決方案。

這兩種機制都被設計用來防止操作系統在它打開的文件突然丟失時突然驚訝 - 特別是當操作系統可能使用該文件作爲通過讀/寫頁面的基礎時內存分頁系統(無論是內存映射文件或可執行

總之,沒有簡單的解決方案,保證任意文件可以刪除

+0

我不知道如何,但在Windows中,它可以找出哪個進程打開了文件。殺死他們,然後你可以刪除文件(儘管我認爲你必須先等一下)。 –