2012-06-25 11 views
7

現在Windowsのレジストリにすべての設定(ある種のアドレスを含む)を格納している、かなり大きなC++アプリケーション(Windowsでは、他のプラットフォームは計画していません)があります。設定を保存するためのベストプラクティス

ユーザーがレジストリ内のエントリを変更するのが困難なため、時にはこれは不便です。私は設定をバージョン管理したいので、設定は常に現在のコードと一致します。現時点では、reg-fileをバージョンアップしていますが、すべてのregファイルがターゲットマシンに追加されているかどうかはわかりません。 C#ではapp.configでデフォルト値を定義できますが、既存の設定は上書きしません。このようなメカニズムやライブラリがC++に存在するかどうかはわかりません。

私は、次の「機能」を持っているしたいと思います:

  • 設定は、更新時にのみ新しい設定をのことを確認してください。ターゲット・マシン上の
  • シンプルな更新(ユーザーによって行うことができます)
  • をバージョン管理することができます既存の設定がデフォルト値で上書きされない
  • ユーザーの設定が単純に変更される
  • Win XPおよびWin 7で同じワークフロー

限り、私はそれを見るように、Windows上の設定を保存するための3つの可能性があります

  • レジストリ
  • iniファイル
  • XMLファイル、当社の

1つのアプリケーションだけスイートは現時点でQtを使用していますが、Boostは利用可能です。

アドレスについては、いくつかの種類のXMLアドレス帳に入れますが、その他の設定についてはわかりませんが、何がベストプラクティスですか。

+2

を掲載し、それを変換し、私は他の選択肢をお勧めします:YAML/JSONを人間のために読み込み可能な形式で、単純な埋め込みのためのSQLite。 iniファイルに関しては、[Boostでiniファイルを解析する方法](http://stackoverflow.com/questions/6175502/how-to-parse-ini-file-with-boost)に興味があるかもしれません。 –

+0

Boost/iniファイルの場合は+1してください。 – DevSolar

+0

複数の包含層が必要な場合は、XML/JSONファイルを使用します。それ以外の場合は、INIが最も簡単な方法です。 – Morwenn

答えて

3

コメントとして、ツリーベースのキー/値構造は一般的な解決策であり、ライブラリは簡単に見つかります。それは十分にテストされ、簡単にあなたの要件については、XMLやJSON

としてエクスポートすることができますよう

Boost's property_treeは、優れた選択肢である:

  • 設定が
をバージョン管理することができます

はい! 「バージョン」を最上位のキーにします。それを他のバージョンと簡単に比較できるようにする。

設定をさまざまなツリーノードに分類し、各ノードにバージョンを割り当てることもできます。ターゲット・マシン上の

  • シンプルな更新(ユーザーによって行うことができます)

アプリケーションを持って、それは実行時にそれを行います。下記参照。

  • のみ新しい設定が追加され、既存の設定がデフォルト値
  • ウィンXPと勝利7の下で、ユーザー
  • 同じワークフローの設定の簡単な変更
で上書きされていない更新にことを確認してください

設定があるバージョンから別のバージョンに変更されると、通常、これらの変更は3つのカテゴリに分類されます。新しいプロパティが必要で、古い設定が破棄され、一部の設定が期待される形式を変更します。例えば。アプリケーションの初期化時に「32華氏は」「0摂氏」

次のようになります。

  • は関係なく、そのバージョンの、既存の設定ファイルをロードします。
  • バージョンは、アプリケーションの現在の何と一致しない場合:
    • は、ツリー内の各ノードの新しい設定
    • のために新しい空のプロパティツリーを作成し、期待されるプロパティ名のセット、および機能を持っていますポインタなどを使用して、古いファイルのツリーに存在しない場合はこの設定を取得します。設定の書式が変更された場合は、新しい名前を付けます。
    • 古いツリーの各設定を検索し、見つかった場合はそれをコピーし、見つからない場合は提供された関数の結果を使用します。
    • 新しい設定ファイルを保存します。

あなたの "行方不明の設定" 機能を行うことができます

  • 戻り一定のデフォルト値。
  • クエリ別の設定のために木や(旧設定はどちらか見つからない場合、デフォルト値で)
  • はユーザー
関連する問題