2

キャッシュファイルと設定ファイルの両方を保存する(qt)クロスプラットフォームアプリケーションを作成しています。たくさん検索しても、どこにどのように保存するのかまだわかりません。QTのものは、車輪の再発明をしたり、非常に時間を節約したりする場合にのみ使用したいことに注意してください。アプリケーションの動作を完全に制御したいのですが、qtがランダムであるか非効率的である場合があります。

Linuxの場合、デフォルトは/ etc //ですが、そこには書き込みアクセス権がなく、アプリはその構成ファイルに変更を書き込みます。キャッシュの場合、それは/ var //になりますが、デフォルトでは書き込みアクセスもありません。設定とキャッシュは、サーバーソフトウェアであるため、ユーザーに依存しないことが望ましいです。

私はいくつかの解決策を考えましたが、それらはあまりエレガントではないようです:

  • インストーラーに適切なアクセス許可でこれらのディレクトリを作成させます(つまり、インストーラーが必要になります... bleh)
  • すべてをユーザーのホームディレクトリに保存し、ユーザーの独立性を失います
  • QTに処理させてください(私はこれが本当に好きではありません)

何か案は?ベストプラクティスは何ですか?このようなものはWindowsとMacのどこに行きますか?

いくつかの説明: これは、単一のユーザーから独立して実行されることになっているサーバーアプリケーションであるため、/homeに何も格納することは望ましくありません。また、QTのGUI機能も使用していません。サーバーは、設定ファイルまたはIP経由でサーバーと通信する別のGUIのいずれかによって管理されます。

4

4 に答える 4

2

これらのフォルダを本当に使用したい場合は、アプリケーションを部分的または完全にroot権限で実行する必要があります。

あなたができるもう一つのことは:

  • アプリケーションの作業ディレクトリmyDirを設定すると、すべてがこの作業ディレクトリ内に保存されます(例が必要な場合はqtcreatorと同じ方法で)。
  • ユーザー固有ではない場所にディレクトリを保存します。/opt 良い候補だと思います。
  • 必要なファイルにアクセス\変更\実行するためにmyDir必要な権限で、ユーザーグループに設定されます。
  • myDirそれ自体は削除するためにrootを必要としますが、内部のファイルは必要ありません。
  • QSettingsを使用して、Qtアプリケーションの設定を自己完結型にします

インストーラーがなければ、あなたはインストーラーになります:スクリプトとコマンドの実行を移動し、最終的にインストールドキュメントを作成します(これは現在スタートアップで行っており、苦痛です。完全なインストーラーモードに変更中です)

注:専門家ではありませんが、サーバーとして2種類のマシンを使用することは、皆さんが本当に問題を探しているように思われます。または、アプリはすべてのタイプのサーバーをターゲットにしているのでしょうか?

于 2012-10-16T12:58:42.103 に答える
0

ユーザーアプリケーションは、構成ファイルやキャッシュなどのユーザー書き込み可能なデータを/etcまたは/varに保存しません。通常は、$ HOME / .appnameを使用し、使用する必要があります。最近では、$ HOME / .config / appname(config )および$ HOME / .local /(データ用)。QSettingsを使用してアプリケーション名などを設定する場合、Qtはここで構成データに対して適切に機能するはずです。/etcはデーモンやシステム構成など用であり、ユーザーアプリケーション用ではありません。/ usr / shareなどに読み取り専用のデフォルト構成がある場合がありますが、ユーザーがそれを書き込むことはできません。ユーザーが書き込み可能なデータを共有すると、システム上の複数のユーザーがアプリケーションを同時に実行するときに、同期/ロックの問題が発生します。

OS X上のWindowsでは、ユーザーが書き込み可能な構成/データは、ユーザーディレクトリ内のフォルダーにも移動します。これは、Macでは$ HOME / Library / Application \ Supportであり、レジストリとC:\ users \ $ Username \ApplicationDataです。 Windowsの場合(正確なパスはWindowsのバージョンによって異なります。環境変数%APPDATA%は場所を指します))。

これらの標準から逸脱するには、ユーザー/ UIアプリケーション(/ etcを使用するシステム全体のデーモン/サービスとは対照的に、/ varが一般的な方法です)の場合、非常に強力な理由が必要です。システム、特にLinuxおよびOS XEgでは、OS Xにインストーラーが必要になります。これは、そこでのユーザーアプリケーションでは非常にまれです。ユーザー、特に管理者はあなたを嫌うでしょう。

于 2012-10-16T14:10:23.863 に答える
0

各プラットフォームと同じ動作に従う、それを実行する準備ができたQtクラスはないと思います。

しかし、たとえば$ HOME / .yourappディレクトリなど、さまざまなプラットフォームで独自のアプリに統合してみることができると思います。このように、QDesktopServices :: storageLocation()は少し役に立ちます。

http://doc.qt.digia.com/4.7/qdesktopservices.html#storageLocation

それが役に立てば幸い。

于 2012-10-16T15:32:31.223 に答える
0

実行可能ファイルと同じフォルダに保存してみませんか。

QString fileName;

fileName = qApp->applicationDirPath();

fileName += "...what you want...";

QFile* file = new QFile(fileName);
于 2012-10-17T00:14:51.723 に答える