QtウィジェットアプリケーションからQFileクラスを使って簡単なテキストファイルにアクセスして、書き込みを読み込もうとしています。ファイルを行単位で文字列として読み込むと正常に動作します。しかし、書き込む準備ができていればそれを開くことはできませ次のコードは、ファイルが存在するかどうかをチェックし、適切なアクセス許可を設定しようとしますが、最終的にファイルは開かれません。Qt:書き込み用にファイルを開くことができません
exists? true
writable? false
permissions before? QFlags(0x4|0x40|0x400|0x4000)
permissions set? false
permissions after? QFlags(0x4|0x40|0x400|0x4000)
opened? false
errors? "Unknown error"
errnum? 5
QIODevice::write (QFile, ":/test.dat"): device not open
私はQIODevice::ReadOnly
にオープン機能でパラメータを変更すると、ファイルがQIODevice::WriteOnly
で失敗し、問題なく読める:
#include "mainwindow.h"
#include <QApplication>
#include <QFile>
#include <QDebug>
int main(int argc, char *argv[]){
QApplication app(argc, argv);
MainWindow w;
w.show();
QFile file(":/test.dat");
qDebug() << "exists? " << file.exists();
qDebug() << "writable? " << file.isWritable();
qDebug() << "permissions before? " << file.permissions();
qDebug() << "permissions set? " << file.setPermissions(QFileDevice::WriteOther | QFileDevice::ReadOther);
qDebug() << "permissions after? " << file.permissions();
qDebug() << "opened? " << file.open(QIODevice::Append);
qDebug() << "errors? " << file.errorString();
qDebug() << "errnum? " << file.error();
QTextStream out(&file);
out << "something to append";
file.close();
return app.exec();
}
Qtは、このメッセージが返されます。ここで は、コードの失敗作品です。なぜ同じことは書いてもうまくいかないのですか?それは許可ですか?そして、なぜ私はsetPermissions
を呼び出した後に権限が変わらないのですか?私はUbuntu 14.04でrootとしてQtを実行します。そして、test.dat
は完全な権利を持っています-rwxrwxrwx
所有者。 誰かを助けることができますか? ありがとう!
私が言及したように:これは私のためには機能しません。私は書き込みを可能にするすべてのOpenModeFlagsを試しましたが、どれも動作しませんでした。 – zufall
ああ、そう、私の見落とし。完全修飾パスを試してください。いいえ〜いいえ:/ "後者は、内部のQtリソース(ちょっと推測)として解釈されるかもしれませんが、そのファイルを別の場所に置いてみてください。 – AlexanderVX
ヒント:正式なOSパスを使用しました。許可を手動で変更するQtアプリケーションではそのように許可が残っていますが、残念ながらまだファイルを開く準備ができていません。 – zufall