Delphi Tips 
-----------------------------

0287  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/11/16 K.Takaoka rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/11/16 K.Takaoka 編集
INI ファイルを扱うもう1つのクラス

みなさん TIniFile を利用して Windows の .ini というファイルを扱われていると思いますが、Inifiles Unit には TMemIniFile というクラスがあります。

TIniFile は Windows API をカプセル化しているので以下のような制限・仕様があります。

・ファイルサイズは 64k bytes までしか認識しない
・1つのセクションの大きさは 32k bytes までしか扱えない
・コメントの概念が存在しない(無意味なキーを使って実現)
・クオーテーションを自動除去する
・Win95/98 では TAB 文字が扱えない
・WInNT では読み書きキャッシングが行われない

最初の2つは容量の制限。
最後の2つは重要で、Win95/98 では TAB 文字を扱えないために

[Section]
Key=Value    タブで区切って Key の意味を説明書き

なんて記述ができてしまい、WinNT でヒドイ目を見ますし、 WinNT では INI ファイルへの読み書きをレジストリに読み書きするためのマッピング処理のため、キャッシュが効かずに低速です。
また、キャッシングの有無に違いがあるため、キャッシュの操作を忘れると INI ファイルを頻繁に読み書きする際に挙動不審になるという弊害もあります。

TMemIniFile は上のような点をすべて解決します。

・ファイルサイズの制限はシステムによってのみ制限される。

・セクションの大きさはファイルサイズによってのみ制限される。

・行頭が ; で開始する行をコメントとして扱う
( ';hoge' のようなキー名は扱えないということです )

・クオーテーションの自動削除は行わない

・OS に関係なく行末までを読み出すことができる

・すべての変更は常にメモリ上にキャッシュされる
( UpdateFile を呼ばずに Free すると変更は無効になります )

と、なります。
TMemIniFile の保存処理で String 型の変数を介すため、2G Bytes までということになりますが、すべての Win32 環境で利用可能な最大メモリ量が 1.995G Bytes ですので、この制限は問題にならないでしょう。
参照: <Windows>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp