INIファイルまたはレジストリまたは個人用ファイル?


19

プロジェクトの構成を保存したい

  1. 画面サイズ
  2. スクリーン位置
  3. フォルダーパス
  4. ユーザー設定など。

これらを保存できる標準的な場所は、構成値です。

  1. 登録
  2. INIファイル
  3. 個人用ファイル(* .cfgなど)

これらの場所からどのように選択しますか?また、それらのいずれかを使用することの長所と短所はありますか?


2
どのツールを使用していますか?一部のテクノロジーには、構成管理ツールに非常に優れたビルドが付属しています。

@ Pierre303は現在VS 2008 for VC ++を使用しています
-Shirish11

ユーザーは変更を加える必要がありますか?
-JeffO

1
YAMLを検討した場合、iniとxmlの両方のベストを得ることができますen.wikipedia.org/wiki/YAML
JFディオン

回答:


20

また、それらのいずれかを使用する長所と短所はありますか?

レジストリ:

  • + Windows環境では比較的標準です。
  • + 一般的にインストーラーなどからの良好なサポート。
  • - プラットフォーム固有のAPI(アプリケーションを移植する場合)。
  • - 特に人間が読めるわけではありません。

INIファイル:

  • + シンプルなフォーマット。
  • + ポータブル。
  • + 人間が読める。
  • - より複雑な情報(たとえば、2レベルより深いネストされたもの)を保存するのは難しい場合があります。
  • ?独自のパーサーを作成する必要があります(難しくはありませんが)、またはSimpleIniなどの外部ライブラリを使用する必要があります(コメントについてはJonathan Merletに感謝します)。

XMLファイル(これは.cfgオプションだと思います):

  • + 標準フォーマット。
  • + ポータブル。
  • + 深くネストされた構造をサポートします。
  • - 特に人間が読めるわけではありません。

個人的には、Windowsアプリケーションの場合、私はC#を使用する傾向があり、XMLとして保存されたユーザー用の個人ファイルを使用します。通常、これを行うのは、私が書くアプリケーションの種類では人間の可読性が優先事項ではないため(そして、アプリケーションには構成エディターが必要です)、. NET環境ではXMLを扱うのが非常に簡単だからです。私は非常に頻繁に、構成ファイルとの間で単純にシリアル化されるUserConfigurationオブジェクトになります-開発はほとんど関係なく(解析、もののキャスト)、構成は強く型付けされた環境で使用する準備ができています。


しばらく前にINIファイルの解析にSimpleIniを使用しましたが、うまく機能していました。
ジョナサン

@JonathanMerletありがとう、SimpleIniを投稿に追加しました。
ダニエルB

15

私は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ファイルの読み取りと編集に特別なツールが必要なのは誰なのでしょうか。


2
おもしろいですが、XMLは見た目が良く、読みやすいと思います。冗長性が気に入らない人には、JSONが適切な代替手段です。
ロバートハーベイ

3
@RobertHarvey JSONは好きです(より深いネストが必要な場合に使用します)が、XMLは実際には私のお茶ではありません
...-yannis

2
XMLは、値を属性にロールすることにより、より良くすることができます。たとえば、<window width="600" height="350" />
ロバートハーベイ

実際、誰もYAMLに言及していないことに本当に驚いています。JSONよりも人間に優しい感じがしますが、機能と構文は非常に似ています。yaml.orgのWebサイトはおそらく、まだ慣れていない人を怖がらせるでしょう。
ダニエルB

@DanielB誰かがYAMLに言及しました ;)
yannis

6

私の好みはXMLファイルです。それらは階層的であり、想像できるほぼすべての方法で自由に曲げることができます。よく理解されており、プラットフォームに依存せず、それらを読み書きするための幅広いソフトウェアが用意されています。


6
しかし、恐ろしく冗長で、結局人間が読めない傾向があります(名前空間宣言やその他のbsでインデントされたり、最大に膨らんだりしないと考えてください)。
マンジャベス

1
@Manjabes:構成ファイルにとって重要ではないと思われる特性。
ロバートハーヴェイ

@robert harvey:私が住んでいる場所は非常に重要です。基本的な設定の調整にはGUIを使用し、高度な設定の場合はiniを編集します。
ピーターB

6

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を参照してください)。


3

オプションを忘れました:データベース。これは主に、アプリケーションがログインしているWindowsユーザーに依存できないときに、ユーザーがアプリケーションにログインするシナリオで使用されます。これは、たとえば、アプリがキオスクモードウィンドウで実行されている場合です。


データベースへの接続の詳細/文字列を保持するためにINIファイルまたはレジストリキーが必要な場合があります
クラススケルトン

@CamelCase Inifileまたはレジストリキーは質問で既に言及されていますが、データベースでは言及されていません。複数のメソッドを同時に使用できないと言ったわけではありません。
ピーターB

1

私の個人的な好みはXMLファイルです。

ほとんどの場合、ユーザーが構成設定を編集する必要があるとは思わないので、この場合、人間の可読性の問題は議論になりません。

それらを編集する必要がある場合は、編集ツールを提供できます。これにより、ユーザーがデータを操作することができなくなります。デフォルト設定を復元したい場合は、ほとんどのユーザーが快適に実行できるファイルxを削除するように伝えることができます。

一部の場所にはWindows 7などでデフォルトで書き込みアクセス権がないため、ファイルを保存する権限があることに注意する必要があります。


INIファイルは、構成を保存するための優れた標準的な方法であり、試行され、テストされていますが、私には少し「Windows 3.1」を感じるだけです!

ユーザーが自分のデータをいじくり回せるようにしたい場合、おそらく最良のオプション


私は個人的にレジストリから離れます。一つには、データを保存したい場所への読み取り/書き込みに必要な権限がユーザーにあることを保証できません。

レジストリの仮想化が関係する最近のOSでは、仮想化された設定を「見る」ことができないため、これは大きな混乱を引き起こす可能性があります-これは、何かが機能しなかった理由を理解しようとして何時間も費やしたことが何度もありました。


3
レジストリの場所のアクセス許可が心配な場合は、おそらく間違った場所に保存しようとしています。ユーザーには、HKey_Current_Userハイブへのアクセス許可が必要です。ユーザーごとの設定はここにあります。
ニールホワイト

@NeilWhite- 権限が必要であることに同意しましたが、熱心なIT管理者はこれを変更できます(または読み取り/書き込み権限を付与しますが、権限を作成しません)。また、OPは、これらの設定が必ずしもユーザーごとであるとは言及していませんでしたが、マシンごとである可能性があります。
マットウィルコ

また、レジストリにはサイズ制限があります。ファイルはしません。
linquize
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.