プロジェクトの構成を保存したい
- 画面サイズ
- スクリーン位置
- フォルダーパス
- ユーザー設定など。
これらを保存できる標準的な場所は、構成値です。
- 登録
- INIファイル
- 個人用ファイル(* .cfgなど)
これらの場所からどのように選択しますか?また、それらのいずれかを使用することの長所と短所はありますか?
プロジェクトの構成を保存したい
これらを保存できる標準的な場所は、構成値です。
これらの場所からどのように選択しますか?また、それらのいずれかを使用することの長所と短所はありますか?
回答:
また、それらのいずれかを使用する長所と短所はありますか?
レジストリ:
+
Windows環境では比較的標準です。+
一般的にインストーラーなどからの良好なサポート。-
プラットフォーム固有のAPI(アプリケーションを移植する場合)。-
特に人間が読めるわけではありません。INIファイル:
+
シンプルなフォーマット。+
ポータブル。+
人間が読める。-
より複雑な情報(たとえば、2レベルより深いネストされたもの)を保存するのは難しい場合があります。?
独自のパーサーを作成する必要があります(難しくはありませんが)、またはSimpleIniなどの外部ライブラリを使用する必要があります(コメントについてはJonathan Merletに感謝します)。XMLファイル(これは.cfgオプションだと思います):
+
標準フォーマット。+
ポータブル。+
深くネストされた構造をサポートします。-
特に人間が読めるわけではありません。個人的には、Windowsアプリケーションの場合、私はC#を使用する傾向があり、XMLとして保存されたユーザー用の個人ファイルを使用します。通常、これを行うのは、私が書くアプリケーションの種類では人間の可読性が優先事項ではないため(そして、アプリケーションには構成エディターが必要です)、. NET環境ではXMLを扱うのが非常に簡単だからです。私は非常に頻繁に、構成ファイルとの間で単純にシリアル化されるUserConfigurationオブジェクトになります-開発はほとんど関係なく(解析、もののキャスト)、構成は強く型付けされた環境で使用する準備ができています。
私はINIファイルに行きます、彼らはより人間に優しいオプションです:
[window]
width = 600
height = 350
position.x = 400
position.y = 200
[paths]
path1 = "/some/random/path/"
path2 = "/some/other/random/path/"
[user]
name = "Yannis"
preference = "INI"
XMLは良い選択肢かもしれませんが、INIのシンプルさとエレガンスに勝るものはありません。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<window>
<width>600</width>
<height>350</height>
<position>
<x>400</x>
<y>200</y>
</position>
</window>
<paths>
<path1>/some/random/path/</path1>
<path2>/some/other/random/path/</path1>
</paths>
<user>
<name>Robert</name>
<preference>XML</preference>
</user>
</configuration>
INIも非常によく理解されており、プラットフォームに依存しません。おそらく、INIファイルの読み取りと編集に特別なツールが必要なのは誰なのでしょうか。
<window width="600" height="350" />
私の好みはXMLファイルです。それらは階層的であり、想像できるほぼすべての方法で自由に曲げることができます。よく理解されており、プラットフォームに依存せず、それらを読み書きするための幅広いソフトウェアが用意されています。
Jeff DのYAMLの提案を拡張するために、ここに簡単な紹介があります。
YAMLはJSONに似ています(実際、JSONはYAML標準のバージョン1.2以降のYAMLのサブセットであるため、YAMLパーサーで有効なJSONを解析できます)。一見したところ、主な違いは、YAML(デフォルト)は、階層を表示するために括弧ではなくインデントを使用することです。また、文字列の引用符がかなり不足しています。上記の簡単な例:
configuration:
window:
width: 600
height: 350
position:
x: 400
y: 200
paths:
path1: some/random/path
path2: some/other/random/path
user:
name: Joe Soap
preference: YAML
より良い例については、WikipediaのYAMLページを参照してください。YAMLのサポートは、ほとんどの主要言語に対応しています(詳細については、yaml.orgを参照してください)。
オプションを忘れました:データベース。これは主に、アプリケーションがログインしているWindowsユーザーに依存できないときに、ユーザーがアプリケーションにログインするシナリオで使用されます。これは、たとえば、アプリがキオスクモードウィンドウで実行されている場合です。
私の個人的な好みはXMLファイルです。
ほとんどの場合、ユーザーが構成設定を編集する必要があるとは思わないので、この場合、人間の可読性の問題は議論になりません。
それらを編集する必要がある場合は、編集ツールを提供できます。これにより、ユーザーがデータを操作することができなくなります。デフォルト設定を復元したい場合は、ほとんどのユーザーが快適に実行できるファイルxを削除するように伝えることができます。
一部の場所にはWindows 7などでデフォルトで書き込みアクセス権がないため、ファイルを保存する権限があることに注意する必要があります。
INIファイルは、構成を保存するための優れた標準的な方法であり、試行され、テストされていますが、私には少し「Windows 3.1」を感じるだけです!
ユーザーが自分のデータをいじくり回せるようにしたい場合、おそらく最良のオプション
私は個人的にレジストリから離れます。一つには、データを保存したい場所への読み取り/書き込みに必要な権限がユーザーにあることを保証できません。
レジストリの仮想化が関係する最近のOSでは、仮想化された設定を「見る」ことができないため、これは大きな混乱を引き起こす可能性があります-これは、何かが機能しなかった理由を理解しようとして何時間も費やしたことが何度もありました。