2016-07-02 1 views
3

Je stocke les paramètres de mon application dans un fichier INI. J'ai lu qu'il y a une limitation de 2kb pour une entrée binaire donc j'ai encodé le binaire dans une chaîne et stocké la valeur sous forme de chaîne (écrit). Lors de la vérification du fichier, il semble que toute la chaîne a été stockée comme prévu. En essayant de le relire, il semble que seulement 2047 caractères ont été lus, donc lors du décodage dans un flux, il échoue.Limite de lecture Delphi INI

Apparemment, il semble qu'il y ait une limite de 2kb pour la chaîne, mais je me demandais si c'est ça ou peut-être que j'ai fait quelque chose de mal. S'il y a une telle limitation, une idée de comment puis-je la contourner?

Merci

EDIT: me idiot, je suis allé à system.inifiles et il est dit dans le 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

Quelle version de Delphi? – Johan

+0

Delphi xe bien que cela puisse être lié à INI en général – Amos

+2

En utilisant 'TMemIniFile', il n'y a pas de telle limitation. –

Répondre

5

La solution est facile.

Étendez TInifile et insérez votre propre version de 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

Je l'ai fait juste après avoir trouvé cela :) – Amos

+3

'TMemIniFile' est une bien meilleure idée. Évitez d'utiliser ces terribles API MS obsolètes. –

+0

@Amos, l'idée de base terrible est de stocker des données binaires dans INI. –