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

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

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

問題は、ファイルパスがフルアクセス権を持っている、ファイルが作成され、書き込み可能な、まだisWritableされているWindows上で完全な権限でfalseを返すまだfalseを返します。書き込みアクセスチェックを削除してファイルに書き込むだけで、書き込みは成功します。 QFile :: openもtrueを返します。何か案は?はのQFileInfo :: isWritable())(7

答えて

4

QFileInfo::isWritable()は、開いているファイルが書き込み可能かどうかをチェックするためのものではなく、ファイルの現在のユーザーのアクセス許可をチェックします。開いているファイルの操作が成功したかどうか確認したい場合は、QFile::open()の呼び出しの戻り値を確認してください。 trueを返した場合、ファイルは書き込み準備ができています。 falseを返す場合は、エラー処理を行います。

isWritable()があなたのケースで失敗する理由はわかりません。 Windowsがファイルが開かれていて、別のopen()呼び出しから書き込み可能ではないと思うかもしれません。本当に許可を確認する場合は、ファイルを開く前にisWritable()に電話してください。

+0

私の投稿をチェックすると、すでにopen()の戻り値をチェックしようとしたことがわかります(trueを返します)。ファイルを開く前に 'isWritable()'を呼び出そうとしましたが、まだfalseを返します。あなたが言っていることが真実なら、 'open()'呼び出しで私のチェックが失敗することはなく、すべてが意図どおりに動作します。 – krizajb

+0

これはうまくいくようですが、このソリューションはUnix互換(UbuntuとKubuntuでテスト済み)です。ありがとう。 – krizajb

0

プログラムを管理者として実行してください(右クリックしてください)。おそらく、この問題はUACによって引き起こされます。

+0

いいえ、すでに試してみました。 – krizajb

+0

ファイルの完全なパスは何ですか?アカウント、通常のユーザーまたは管理者はどのようなユーザーですか? – Flynch