2016-05-25 12 views
1

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所有者。 誰かを助けることができますか? ありがとう!

答えて

2

著者は、コンソールプロセスによって作成されたファイルへの昇格特権での書き込みにLinux関連の問題が発生しています。私は問題を完全に再現しているとしてファイルを削除しようとしたとき:

vi \home\myuser\Documents\f.txt // create file like that from console 
rm \home\myuser\Documents\f.txt // now try to remove it from console 

私は"rm: remove write-protected regular file "\home\myuser\Documents\f.txt"を持って、「はい」答え、その後、上記のコードは、プログラムのプロセスのコンテキストで、新しいファイルを作成した後に示しています

opened?    true 
exists?    true 
writable?    true 
permissions before? QFlags(0x4|0x20|0x40|0x200|0x400|0x2000|0x4000) 
permissions set?  true 
permissions after? QFlags(0x4|0x20|0x40|0x200|0x400|0x2000|0x4000) 
errors?    "Unknown error" 
errnum?    0 

私はUbuntu 14.04でrootとしてQt Creatorを実行します。

あなたが実行するプログラムの権限を保証するものではありません。更新:適切な権限でプログラムを実行していることを確認してください。この場合ルート。

+0

私が言及したように:これは私のためには機能しません。私は書き込みを可能にするすべてのOpenModeFlagsを試しましたが、どれも動作しませんでした。 – zufall

+0

ああ、そう、私の見落とし。完全修飾パスを試してください。いいえ〜いいえ:/ "後者は、内部のQtリソース(ちょっと推測)として解釈されるかもしれませんが、そのファイルを別の場所に置いてみてください。 – AlexanderVX

+0

ヒント:正式なOSパスを使用しました。許可を手動で変更するQtアプリケーションではそのように許可が残っていますが、残念ながらまだファイルを開く準備ができていません。 – zufall

関連する問題