Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Tamaño máximo ficheros .ini (https://www.clubdelphi.com/foros/showthread.php?t=71085)

blaiselaborde 29-11-2010 14:56:29

Tamaño máximo ficheros .ini
 
Hola;

Tengo un fichero .ini que leo desde mi aplicación en Delphi 7 y, una de mis secciones tiene más de 1800 claves ó registros, pero al hacer el ReadSection, sólo me recoge las primeras 480.

Sabe alguien si el ReadSection tiene límites? y de ser así, existe una manera diferente de leer las líneas sin tener que hacer la búsqueda como si fuese un fichero de texto?.

Gracias;

Casimiro Notevi 29-11-2010 16:07:43

¿Y cómo lo lees?

Neftali [Germán.Estévez] 29-11-2010 16:24:31

¿No lo estrás leyendo en un TMemo? Que si tienes límites.

blaiselaborde 29-11-2010 16:36:20

Lo estoy leyendo en un ComboBox.

He estado revisando el procedimiento ReadSection y veo que tiene definido como constante BufSize = 16384.

Lo que me indica que no permite tamaños mayores de 16K.

Dado que es un rollo intentar cambiar y compilar la unidad IniFiles, intentaré traerme el Procedimiento a local y cambiarle el tamaño del BufSize.

Casimiro Notevi 29-11-2010 16:59:36

Léelo hacia un richedit, por ejemplo.

defcon1_es 30-11-2010 12:53:52

También puedes probar con un objeto de la clase TMemIniFile,
en vez de la clase TIniFile.

blaiselaborde 30-11-2010 15:32:12

Gracias a todos.

He podido solucionar el problema como lo indiqué: importando el Procedimiento a mi aplicación y ampliando el BuffSize de 16K a 64K.

El código nuevo ha quedado así:

Código Delphi [-]
Procedure TApliF.pINISectLoadList(aIniFileName, aSectionName: PChar;
                                          Var aList       : TStringList);
Const cBufSize = 65536;
Var bBuffer,
      P      : PChar;
Begin
  GetMem(bBuffer, cBufSize);
  Try
    aList.BeginUpdate;
    Try
      aList.Clear;
      If GetPrivateProfileString(aSectionName, Nil, Nil, bBuffer, cBufSize, aIniFileName) <> 0
      then
        Begin
          P := bBuffer;
          While P^ <> #0 do
            Begin
              aList.Add(P);
              Inc(P, StrLen(P) + 1);
            end;
        end;
    Finally
      aList.EndUpdate;
    end; // Try
  Finally
    FreeMem(bBuffer, cBufSize);
  end; // Try
end; // Proc

Un saludo y hasta la próxima.


La franja horaria es GMT +2. Ahora son las 09:15:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi