TIniFile.ReadStringメソッドの制限と代替手段
問題
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メソッドには、サイズ制限は設けられておりません。