TIniFile.ReadStringメソッドの制限と代替手段

提供: Support
移動先: 案内検索

問題

docwikiのTIniFile.ReadStringメソッドの説明には記載されていませんが、読み込みサイズに制限があります。

ReadStringメソッドを利用してiniファイル内の文字列情報を読み込もうとした場合、キーに対するデータ値(文字列の長さ)が2048バイトを超えていると、それ以上の文字の読み込みは無視されます。その理由は、ReadStringメソッドの実装は、以下のようなコードにバッファサイズが2048バイト迄しか確保されていないためです。

function TIniFile.ReadString(const Section, Ident, Default: string): string;
var
  Buffer: array[0..2047] of Char;
begin
                                                                                                                   
  SetString(Result, Buffer, GetPrivateProfileString(MarshaledString(Section),
    MarshaledString(Ident), MarshaledString(Default), Buffer, Length(Buffer),
    MarshaledString(FFileName)));
end;

この仕様は、古いWindowsバージョンとの互換性のために、このサイズ設定のまま修正されずに残されています。

解決

TIniFileではなく、TMemIniFileを利用してください。TMemIniFile.ReadStringメソッドには、サイズ制限は設けられておりません。

参考情報