2016-07-02 25 views
3

Ich speichere die Einstellungen meiner Anwendung in einer INI-Datei. Ich lese, dass es eine Beschränkung von 2kb für einen binären Eintrag gibt, also habe ich die Binärdatei in eine Zeichenfolge codiert und den Wert als Zeichenfolge (Schreibstring) gespeichert. Beim Überprüfen der Datei scheint die gesamte Zeichenfolge wie erwartet gespeichert worden zu sein.Delphi INI readstring Beschränkung

Beim Versuch, es zurück zu lesen, scheint es, dass nur 2047 Zeichen gelesen wurden, so dass es bei der Decodierung zurück in einen Stream fehlschlägt.

Anscheinend scheint es auch eine 2kb Limitierung für String zu geben, aber ich habe mich gefragt, ob das das ist oder vielleicht habe ich etwas falsch gemacht. Wenn es solch eine Beschränkung gibt, irgendeine Idee, wie kann ich es umgehen?

Dank

EDIT: dumm von mir, ging ich zu system.inifiles und es sagt, in der Code-

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

Welche Delphi-Version? – Johan

+0

Delphi xe obwohl es mit INI im Allgemeinen verwandt sein könnte – Amos

+2

Unter Verwendung der 'TMemIniFile' gibt es keine solche Beschränkung. –

Antwort

5

Die Lösung ist einfach.

Erweitern Sie TInifile und fügen Sie Ihre eigene Version ReadString ein.

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

Ich tat genau das, nachdem ich das herausgefunden hatte :) – Amos

+3

'TMemIniFile' ist eine viel bessere Idee. Vermeiden Sie die Verwendung dieser fürchterlich veralteten MS-APIs. –

+0

@Amos, ist die Kern schreckliche Idee, binäre Daten in INI zu speichern. –