Delphi INI读取限制

时间:2016-07-02 13:09:31

标签: delphi limit ini

我将应用程序的设置存储在INI文件中。我读到二进制条目存在2kb的限制,因此我将二进制编码为字符串并将值存储为字符串(writestring)。检查文件时,似乎所有字符串都按预期存储。

当尝试回读时,似乎只读取了2047个字符,因此在将其解码回流时,它会失败。

显然似乎字符串也有2kb的限制,但我想知道那是不是或者我做错了什么。如果有这样的限制,任何想法如何绕过它?

由于

编辑: 傻我,我去了system.inifiles,它在代码中说道

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;

1 个答案:

答案 0 :(得分:5)

解决方案很简单。

扩展TInifile并插入您自己的ReadString版本。

TMyIniFile = class(TInifile)
      function ReadString(const Section, Ident, Default: string): string; override;
end;

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