2011-03-31 100 views
15

在windows中刪除只讀文件我已經設置了一個文件爲只讀(右鍵單擊並只檢查一次)。現在,當我嘗試使用功能bool QDir::remove(const QString & fileName)刪除該文件時,不會刪除該文件並返回false
我該如何繼續?我試圖通過使用QFile::setPermission更改文件的權限來嘗試擺弄,但也返回false
任何人都可以建議一個相同的方法嗎?Qt C++使用

回答

1

只能爲你的用戶權限執行文件設置文件權限與QFile

當然這一點。錯誤也可能是因爲該文件在另一個應用程序中打開

+0

顯然使用QFile :: setPermissions更改權限也會返回false。 – 2011-03-31 18:08:15

+0

該文件是否在其他內容中打開?你有權刪除它嗎?你確定文件名是正確的(特別是\ vs/in path) – 2011-03-31 20:04:21

-3

您是否嘗試過使用bool QFile :: remove(const QString & fileName)?

1

首先,你檢查了QFile::error()看看爲什麼文件沒有被刪除?其次,如果您仍然沒有收到有用的錯誤消息,可以查看源代碼以瞭解是否可以獲取更多信息。檢查源代碼將顯示以下內容,例如:

QFile::remove()使用底層文件引擎執行刪除操作。該文件引擎是特定於平臺的,並且適用於Windows的qfsfileengine_win.cpp。 830行顯示它使用DeleteFile來執行刪除操作,因此您可能可以通過調用GetLastError來獲得更多信息,但我希望Qt能夠恰當地轉換錯誤消息。

+0

這根本不回答問題。他具體詢問如何移除總是以Qfile :: remove()失敗的只讀文件。 – cen 2013-11-25 19:40:29

-2

QDir :: remove()函數不是靜態函數。所以你可以用父文件路徑創建QDir並調用然後刪除它:

QDir dir(parent's directory);

然後

dir.remove(fileName);

-2

我認爲你應該使用這樣的:

bool QFile::remove (const QString & fileName) [static] 

,而不是這樣的:

QDir::remove (const QString & fileName) 
18
file.setPermissions(QFile::ReadOther | QFile::WriteOther); 
file.remove(); 

應該工作。

+1

這是正確的答案。如果其他人陷入這個問題,就投它票。我一整天都在努力弄清楚這一點。 – cen 2013-11-25 19:53:52