2016-07-02 13 views
3

私はアプリケーションの設定をINIファイルに保存しています。バイナリエントリのために2kbという制限があるので、バイナリを文字列にエンコードし、その値を文字列(writestring)として保存しました。ファイルをチェックすると、すべての文字列が期待通りに格納されているようです。Delphi INIの読み取りストリングの制限

読み返してみると、2047文字しか読み込まれていないように見えるので、ストリームにデコードすると失敗します。

明らかに、文字列にも2kbの制限があるようですが、それがそれか多分私が間違っていたのか疑問に思っていました。そのような制限がある場合は、どのように私はそれをバイパスできますか?

おかげ

EDIT:私 愚かな、私は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; 
+0

どのデルファイバージョンですか? – Johan

+0

一般的にINIに関連しているかもしれませんが、Delphi xe – Amos

+2

TMemIniFileを使用すると、そのような制限はありません。 –

答えて

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; 
+0

これを見つけた後、私は正確にそれをしました:) – Amos

+3

'TMemIniFile'ははるかに良いアイデアです。これらの恐ろしいMS APIを使用しないでください。 –

+0

@Amos、コアのひどい考えは、バイナリデータをINIに格納することです。 –

関連する問題