我有一個適用於Linux但不適用於Windows的Qt程序。它逐漸從互聯網下載東西,將其寫入文件,然後嘗試使用QDesktopServices :: openUrl打開該文件。這在Linux(Fedora)下工作正常,但是當我在Windows下運行時,沒有任何事情發生 - 文件從不打開,但也沒有報告錯誤。在Qt中釋放文件鎖定
但是,如果我嘗試在Windows上手動打開下載的文件,我找到了原因。我得到了錯誤Another program is currently using this file
,這意味着Qt沒有釋放它對文件的鎖定。不過,我已經在它上面調用了file-> close()。
如何確保QFile上的所有鎖定都已釋放?
下面是代碼片段運行該文件已被寫入後:
QString filename = file->fileName();
if (!file->flush())
emit error("Could not finish writing file") // Not emitted
file->close();
QDesktopServices::openUrl(QUrl::fromLocalFile(filename));
你測試過你的操作結果(刷新,關閉)是否有錯誤? – Ilya
嘗試刪除文件對象是否有幫助。 IIRC至少在過去的某個時候是必要的。 –
close()意味着flush(),所以顯式flush()不應該是必需的 –