我嘗試使用QFile寫入現有文件,QFile按預期工作。但是,問題是,如果文件在Excel中打開,從我的程序寫入文件失敗。使用QFile寫入文件失敗,沒有錯誤代碼,當已經在Excel中打開時
我嘗試使用QFileInfo測試權限,並具有文件的所有讀寫權限。測試
bool opened = file-> open (QIODevice :: WriteOnly)
返回true。
當使用notepad ++打開文件時,不會發生同樣的問題。
如何檢查文件是否被鎖定並且無法寫入?
我嘗試使用QFile寫入現有文件,QFile按預期工作。但是,問題是,如果文件在Excel中打開,從我的程序寫入文件失敗。使用QFile寫入文件失敗,沒有錯誤代碼,當已經在Excel中打開時
我嘗試使用QFileInfo測試權限,並具有文件的所有讀寫權限。測試
bool opened = file-> open (QIODevice :: WriteOnly)
返回true。
當使用notepad ++打開文件時,不會發生同樣的問題。
如何檢查文件是否被鎖定並且無法寫入?
Excel鎖定其打開的文件以供專用。您不能寫入打開的文件,也不能移動或刪除它。沒有辦法繞過這個鎖。
感謝您的快速和明確的答案,有沒有辦法知道文件是否被Excel阻止。 – bizris
'QFile :: open'應該返回false。對我來說,我已經檢查過了。可能在某些系統或配置上它可以返回true,但是'write'應該返回一個錯誤。您應該檢查「open」和「write」返回值以確保文件保存正確。 –
我不使用QFile寫我使用它正確的打開我的文件和寫我使用QTextStream,這裏是我的代碼的一小竅門 QFile * file = new QFile(「my file」); bool opened = file-> open(QIODevice :: WriteOnly);如果(!打開){ qDebug()<<「write open ERROR」; } QTextStream * flux = new QTextStream(file); * flux <<「text to write」<< endl; file-> close();我會看看我是否可以使用QFile ::寫入 – bizris
當您使用一個QFile ::寫入功能,它返回寫入的字節數,或-1,如果發生錯誤。
如果您檢查寫入函數的返回碼,您應該可以使用它來確定文件被另一個進程鎖定。
調用QFile :: open返回時沒有錯誤,因爲即使另一個進程已經鎖定它,仍然可以獲得文件的有效句柄,從而防止您同時寫入該文件。
返回碼將是-1,並不是很有用。 errno可能會工作,並檢查文件的errorString()。後者只給出一個人類可讀的錯誤字符串,沒有人應該在代碼中分析。 –
感謝您的回覆,最後我使用QFile :: write而不是使用QtextStream來寫入文件。 – bizris
Excel肯定會對記事本++不執行的文件進行鎖定。 –
記事本++很可能在加載後關閉文件並且不會保持打開狀態。 –