5

インストールされたディレクトリ(C:\ Program Files ...)に書き込む必要があるQtプログラム(最初はWindows 7の場合は4.7)を作成しています。「保護」される場所(プログラムファイル、C:\など)に書き込もうとすると、ファイルが作成されません。ただし、QFileはエラーコードを表示しません(error()は0を返します。これは、正常に機能したことを意味します)。

これが私が使用しているコードスニペットで、機能していません。プログラムのかなり後でファイルを閉じます。

QApplication a(argc、argv);

// Setting plugin paths.
QStringList paths = QCoreApplication::libraryPaths();
paths.append(QCoreApplication::applicationDirPath());
QCoreApplication::setLibraryPaths(paths);



// Debug file.
QString path = QCoreApplication::applicationDirPath() + "/debug.dat";
//QFile debugFile(QCoreApplication::applicationDirPath() + "/debug.dat");
QFile debugFile("C:/debug.txt");
qDebug() << debugFile.error();
debugFile.setPermissions(QFile::WriteUser | QFile::WriteGroup | QFile::WriteOwner | QFile::WriteOther);
debugFile.open(QFile::WriteOnly);
QTextStream debugStream(&debugFile);

// Processing the arguments.
debugStream << QString("Processing Arguments\n");

この問題を解決するためのヒントはありますか?

助けてくれてありがとう、

ジェック


マニフェストファイルを追加することは、この問題を修正するために私が選択したルートです。

すべての助けに感謝します。

4

3 に答える 3

7

そのユーザーのVirtualStoreにファイルが作成されていないかどうかを確認しましたか?[アプリケーションとサービスのログ]->[Microsoft]->[Windows]->[UacFileVirtualization]->[操作]でイベントビューアを確認します。イベントID5000のエントリが表示された場合は、FileCreateVirtualExcludeイベントが発生しています。

ファイルがの下に作成されていないかどうかを確認します%USERPROFILE%\AppData\Local\VirtualStore。含まれている場合は、必要な権限を要求するマニフェストを埋め込む必要がある場合があります(つまり、仮想化をオフにします)。

詳細については、Windows Vista用の新しいUACテクノロジを参照してください(下にスクロールして仮想化を探します)。

于 2011-01-09T19:58:45.243 に答える
2

Windows Vista +でこのようなフォルダに書き込むには、十分なユーザーアクセス権(つまり、「管理者として実行」)を取得する必要があります。管理者としてアプリを起動するか、WinAPIの呼び出しを介して管理者権限を要求します。

于 2011-01-09T18:04:32.900 に答える
2

QFileからエラーコードが表示される場合がありますが、チェックに失敗しています。

次のようなことをする必要があります。

if (!debugFile.open(QFile::WriteOnly)) {
    qWarning() << "Failed to open" << debugFile.fileName() << "for write:" << debugFile.errorString();
}

の戻り値を確認しましたが、呼び出す前にQFile::errorのみ、オープン試行に確認する必要があります。open

于 2011-01-09T22:45:40.333 に答える