2013-09-26 43 views
2

我嘗試使用QFile寫入現有文件,QFile按預期工作。但是,問題是,如果文件在Excel中打開,從我的程序寫入文件失敗。使用QFile寫入文件失敗,沒有錯誤代碼,當已經在Excel中打開時

我嘗試使用QFileInfo測試權限,並具有文件的所有讀寫權限。測試

bool opened = file-> open (QIODevice :: WriteOnly) 

返回true。

當使用notepad ++打開文件時,不會發生同樣的問題。

如何檢查文件是否被鎖定並且無法寫入?

+1

Excel肯定會對記事本++不執行的文件進行鎖定。 –

+1

記事本++很可能在加載後關閉文件並且不會保持打開狀態。 –

回答

2

Excel鎖定其打開的文件以供專用。您不能寫入打開的文件,也不能移動或刪除它。沒有辦法繞過這個鎖。

參見:Write to locked file regardless of lock status

+0

感謝您的快速和明確的答案,有沒有辦法知道文件是否被Excel阻止。 – bizris

+0

'QFile :: open'應該返回false。對我來說,我已經檢查過了。可能在某些系統或配置上它可以返回true,但是'write'應該返回一個錯誤。您應該檢查「open」和「write」返回值以確保文件保存正確。 –

+0

我不使用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

1

當您使用一個QFile ::寫入功能,它返回寫入的字節數,或-1,如果發生錯誤。

如果您檢查寫入函數的返回碼,您應該可以使用它來確定文件被另一個進程鎖定。

調用QFile :: open返回時沒有錯誤,因爲即使另一個進程已經鎖定它,仍然可以獲得文件的有效句柄,從而防止您同時寫入該文件。

+0

返回碼將是-1,並不是很有用。 errno可能會工作,並檢查文件的errorString()。後者只給出一個人類可讀的錯誤字符串,沒有人應該在代碼中分析。 –

+0

感謝您的回覆,最後我使用QFile :: write而不是使用QtextStream來寫入文件。 – bizris

相關問題