10
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[C#]設定ファイルの読み込みと書き込み その1

10
Posted at

一応職業としてはプログラマを自称しているはずなのに、最近RubyはおろかメインのC#すら触ってない子がこちらになります。
SE仕事も楽しいけど、一応本業はプログラマ(2回目)だし、黙々と作業してて「うああああああこんなもんツール作ろうぜめんどくせえ!(ちゃぶ台投げ」という至って個人的な事件もあったので、肩慣らしも兼ねてWindowsの設定ファイルについてまとめ。

設定ファイルの種類

  • iniファイル
  • XMLファイル
  • バイナリファイル

さっくり思いつく範囲だとこんなもんですかね。
レジストリは設定「ファイル」ではないので今回除外します。
親玉(Microsoft)がどう意図してるかは別として、現実に使われてる設定ってこの辺りかなーと思います。
思い込みましょう。
なぜかと言えば、今回はその3つについてまとめたいからです。

iniファイル

昔ながらの馴染み深い設定ファイル。

  • メリット
    システムの知識が比較的浅い人でもわかりやすい。
    例えば業務システムで現地の常駐スタッフや営業に「このファイルをこう直して!」という指示が通りやすい。
    テキストエディタさえ使えればなんとかできるハードルの低さ。

  • デメリット
    ハードルが低すぎるが故に好き放題変更できてしまう。
    結果、動作しなくなるレベルの好き放題をされたり、不整合の元を作ったりする。
    セクションの考え方は「メモ帳なら使えるよ!」レベルの人には通じないと思われる。
    読み込みだけならともかく書き込みを行う場合、ちょっとプログラムからの編集が面倒。

つまり、「比較的頻繁に人手で変更する可能性がある」とか「プログラムは読み込む一方」の設定はiniファイルに書くのが便利そう。
実際自分の周りでも、DBの接続先設定とか、動作モード設定の情報でよく使います。

XMLファイル

最近iniファイルに代わってよく見られるようになった気がする。

  • メリット
    ある程度以上知識のある人なら人手で変更することができる。
    ダブルクリックしてデフォルトのIEとかで開いちゃって「編集できない!」という人を排除できる。
    iniファイルに比べて複雑な設定が可能。
    圧倒的にプログラムで扱いやすい。

  • デメリット
    あんまりないが、XMLのルールが厳密なので、手で編集時にうっかり消しちゃった事件などが発生すると泣きを見る。
    iniファイルに比べると目視で追うのはちょっと辛い。

読むにしても書くにしてもとにかくプログラムで扱いやすいのでラク。
設定画面で変更するのがメインだけど、手で変更する可能性もあるもの向き。
それこそHTMLが元祖ではあるけど、画面イメージ設定とかデータ構造の定義によく使う。

バイナリファイル

これを使うのは限られた状況な気がする。

  • メリット
    ユーザーから見えない。
    勝手に変更されたり、どんな設定になっているのかを覗き見られたりする心配がない。
    プログラムからの変更はXMLと同じく容易。

  • デメリット
    バイナリなので、人手の読解は困難というかやる気がしない。

普通はゲームとかの設定で使うのかな?
実は自分では使ったことがない。
でも、勝手に設定いじってしまうユーザーにはかなり有効だなってたまに思う。


御託にもなってない御託はこの辺で終わりにして、次回から実装です。

10
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?