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