2012-04-13 57 views
2
QFile file(filePath); 
QFileInfo fileInfo(file); 

file.open(QIODevice::ReadWrite); //or WriteOnly 

if(!fileInfo.isWritable()) 
{ 
    //Log error 
} 
else 
{ 
    //Save to file 
} 

問題是,filepath具有完全訪問權限,文件被創建並可寫,但isWritable()仍然返回false。如果我刪除寫入訪問檢查並只寫入文件,則寫入成功。 QFile :: open也返回true。有任何想法嗎?QFileInfo :: isWritable()以完全權限在Windows 7上返回false

回答

4

QFileInfo::isWritable()不用於檢查打開文件是否可寫,而是檢查當前用戶對文件的權限。如果您只想查看打開文件操作是否成功,請檢查呼叫QFile::open()的返回值。如果它返回true,那麼文件已準備好寫入。如果返回false,請處理錯誤處理。

我不知道你爲什麼isWritable()失敗。這可能是Windows認爲該文件已打開,因此不能從另一個open()調用寫入。如果您確實想要檢查權限,請在打開文件前致電isWritable()

+0

如果你檢查我的帖子,你會看到我已經嘗試檢查'open()'的返回值(返回true)。只是在打開文件之前嘗試調用'isWritable()',仍然返回false。如果你說的是真的,那麼我的檢查不會在'open()'調用失敗,並且一切都將按照預期工作。 – krizajb 2012-04-16 05:41:08

+0

看起來很有效,這個解決方案也是Unix兼容的(在Ubuntu和Kubuntu上測試過)。謝謝。 – krizajb 2012-04-16 10:30:05

0

嘗試以管理員身份運行程序(右鍵點擊它)。也許這個問題是由UAC引起的。

+0

不,已經嘗試過。 – krizajb 2012-04-16 05:31:48

+0

文件的完整路徑是什麼?什麼類型的用戶是您的帳戶,普通用戶或管理員? – Flynch 2012-04-16 09:34:15