7

アプリケーション設定を保存するためのかなり標準的な方法で、主にウィンドウ用ですが、他のプラットフォームに簡単に移行できます。

基本的に、必要な設定の 4 つのグループがあります。

  • グローバル設定、すべてのユーザーに影響し、マシン間で移動される可能性があります
  • グローバル システム設定は、すべてのユーザーに影響しますが、そのシステムに固有です (たとえば、そのシステムのデフォルト、たとえばグラフィック オプション)。
  • ユーザー設定、システム間で移動されるユーザー設定 (音量など)
  • ユーザーのシステム設定、そのシステムに固有のユーザー設定 (例: ハードウェアに依存するグラフィック オプション)

各レベルは前のレベルを上書きし、ユーザーが選択したオプションを保存するユーザー設定を使用して、「グローバル設定」をアプリケーションの既定値の大部分にすることができます。最初の 2 つは基本的に、ユーザー設定がない場合のデフォルトです (たとえば、新しいユーザーの場合)。

一連の機能を実装することを検討しましたが、これをさまざまなシステムに実装することができます (おそらく ini ファイルを介して)。しかし、これが最善の方法ですか?

(c++)

namespace config
{
    void Init(const std::string &AppName);
    //updates config for keys/sections that don't exist (ie don't overwrite changes by advanced users by rewriting the entire file)
    void Defaults          (std::map<std::string,std::map<std::string,std::string> > &Map);
    void SystemDefaults    (std::map<std::string,std::map<std::string,std::string> > &Map);

    void Set               (const std::string &Section, const std::string &Key, const std::string &Value);
    void SetSystem         (const std::string &Section, const std::string &Key, const std::string &Value);

    void SetUser           (const std::string &Section, const std::string &Key, const std::string &Value);
    void SetUserSystem     (const std::string &Section, const std::string &Key, const std::string &Value);

    std::string GetValue   (const std::string &Section, const std::string &Key);
}

Windows にはそのような設定用の一連のディレクトリがあることは知っていますが、これらは私のニーズに合った正しいディレクトリですか?

編集:たとえば、Windows レジストリを使用するのではなく、ファイル (ini または xml) を使用したいと思います。ただし、これらの構成ファイルを各 OS に配置するのに最適な場所はどこですか?

Vista でこれらを見つけましたが、これは私のグループに合っているようですが、古い Windows バージョン (win2000、XP などをサポートする必要があります) についてはどうですか? Mac/Linux には独自の同様のフォルダーがありますか?

  • グローバル設定 - <SYSDRIVE>\Users\Default\Appdata\Roaming
  • グローバル システム設定 - <SYSDRIVE>\Users\Default\Appdata\Local
  • ユーザー設定 - <SYSDRIVE>\Users\<USER>\AppData\Roaming
  • ユーザーシステム設定 - <SYSDRIVE>\Users\<USER>\AppData\Local
4

3 に答える 3

7

ブースト ユーザーの場合は、プログラム オプションライブラリを参照してください。これは、構成ファイル、環境変数、および (もちろん) コマンド ライン オプションの使用をサポートしています。

移植できるように設計されているため、クロスプラットフォームの頭痛が軽減されます.

于 2008-10-16T15:06:58.993 に答える
3

クロスプラットフォームアプリはどこにデータを保持する必要がありますか?も参照してください。

于 2008-10-16T13:30:32.463 に答える
1

(少なくとも) 3 つの合理的な選択肢があります。

レジストリ: 移植性と相対的な不透明性のため、これは私のお気に入りではありません。

環境変数: マテリアルが保存されている場所 (「インストール ディレクトリ」など) を指すもの (1 つだけ) を使用することをお勧めします。

ファイル: ユーザーのホーム ディレクトリ (またはそのサブディレクトリ) とプロジェクト/製品ディレクトリの両方が保存に適しています。

単純な keyword=value パラダイムと基本的なルールを使用して、変数 (設定) を複数の種類のコードで非常に簡単に読み取ることができるようにすることができます。たとえば、私は通常、プロパティ ファイルに Java パラダイムを使用し、対応するビヘイビア C コードを使用して、両方のコードラインが設定を簡単に読み取れるようにします。

于 2008-10-16T13:20:37.100 に答える