投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/3/28 19:14:17
今というか、実際には15年前以上から非推奨になっています。

ini ファイルは 16bit 時代の遺物であり、32bit/64bit OS においては、
「レジストリ」を使う事が推奨されています。
http://msdn.microsoft.com/ja-jp/library/cc429779.aspx

レジストリには長所だけではなく、もちろん欠点もあるでしょうが、
市販アプリでは、ini ファイルはあまり使われていないようですね。
ただし、レジストリを好まないユーザーもいますので、フリーソフト等では
ファイルに設定を保存することも少なくないかと思います。


なお、レジストリの読み書きには、
 DeleteSetting
 GetAllSettings
 GetSetting
 SaveSetting
などの関数/ステートメントが使えます。これらでは機能不足な場合、
VB.NET では Microsoft.Win32.Registry クラスを使う事もできます。
(ただし CE の場合は Registry クラスを使えないため、API が必要)


> なぜiniは推奨されてないのですか?

理由は幾つかあるかとおもいますが、たとえば
 ・マルチユーザー対応が考慮されていない。
 ・セキュリティ上の理由。(アクセス許可を個別に設定できないなど)
という点を挙げることができます。
http://tmz.skr.jp/mini/registry.html

たとえば、複数のユーザーがデスクトップにログオンするような場合においては、
「アプリケーション単位の設定」と「ユーザー別の設定」を管理するための
仕組みが、ini ファイルにはありません。
レジストリであれば、HKEY_CURRENT_USER を使って、ユーザー別設定を保持できますし、
他のユーザーのレジストリキーにアクセスできないよう設定されています。(管理者以外)

このマルチユーザーについては、一応、ini ファイルを
 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping
のレジストリキーにマッピングできるようになっており、これを経由することで、
限定的にユーザー別設定として保存できるような仕組みが用意されてはいるのですが、
これは既存アプリの延命措置のための物であり、新規アプリで使うべきではないでしょう。



> 今はXMLでしょうか 
VB.NET なら、app.config を通じて XML によるデータ保存の仕組みがあるので
それをそのまま使っても良いでしょう。

実際の所、別にレジストリに拘る必要は無く、先に挙げたような問題を解決できるなら
「ファイル」を使っても一向に構いません。その意味では ini ファイルでも良いのですが、
結局のところ、問題は『保存先』という事になります。


多くのアプリケーションは Program Files 配下に配置されますが、
このフォルダーは本来、一般ユーザーにとっては「読み込み専用」です。
(このフォルダーへの書き込みは、インストーラーが担う事になっています)

一般ユーザーが書き込める保存先は、APPDATA (LOCAL_APPDATA) であり、これは
 C:\Documents and Settings\[アカウント名]\Application Data
 C:\Documents and Settings\[アカウント名]\Local Settings\Application Data
もしくは
 C:\Users\[アカウント名]\AppData\Roaming
 C:\Users\[アカウント名]\AppData\Local
といったパスになっています。VB.NET では、下記の手法で取得できます。
http://dobon.net/vb/dotnet/file/getfolderpath.html


なお、Vista や Win7 においては、ユーザ権限が不足した状態で読み書きすると、
バーチャルストアにリダイレクトされる可能性がある点にも注意が必要です。
(この点については、ini でもレジストリでも同様です)
http://dsas.blog.klab.org/archives/51108671.html