Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con StringList (https://www.clubdelphi.com/foros/showthread.php?t=44037)

MaMu 26-05-2007 21:23:58

Problema con StringList
 
Resulta que cuento los subdirectorios que hay en un directorio, utlizando el siguiente procedimiento, al cual le agregue un StringList, para almacenar los nombres de los directorios que cuenta:

Código Delphi [-]
var Lista: TStrings;
 
...
 
function NumeroSubDirectorios(directorio: string;
   ocultos, sistema, soloLectura: boolean) : integer;
 var
   SR: TSearchRec;
   atributos: Cardinal;
 begin
    Lista:=TStringList.Create;
    Lista.Clear;
   Result := 0;
   atributos := faDirectory;
   if ocultos then atributos := atributos or faHidden;
   if sistema then atributos := atributos or faSysFile;
  // if soloLectura then atributos := atributos or faReadOnly;
   directorio := IncludeTrailingPathDelimiter(directorio);
   if FindFirst(directorio +'*', atributos, SR) = 0 then
   begin
     repeat
       if (SR.Name <> '.') and (SR.Name <> '..')
         and DirectoryExists(directorio + SR.Name)
         then begin
           Inc(Result);
           Lista.Add(SR.Name);
         end
     until FindNext(SR) <> 0;
     SysUtils.FindClose(SR);
   end;
 end;

Pero cuando quiero ir al ultimo elemento de la siguiente manera...

Código Delphi [-]
...
if Lista.Count>0
    then begin
       ShowMessage(IntToStr(Lista.Count)+' - '+Lista.String[Lista.Count-1]);
    end;
  end;
...

Siempre me muestra el primer elemento. Porque? que hago mal?

Saludos y Gracias

xEsk 26-05-2007 22:35:38

He probado tu codigo, aparte de un pequeño error con el ejemplo que has puesto, me funciona bien, muestra el ultimo elemento añadido:

Código Delphi [-]
if Lista.Count > 0 then 
  ShowMessage(IntToStr(Lista.Count) + ' - ' + Lista[Lista.Count-1]);

Lepe 26-05-2007 22:40:45

Lista es una variable global, cada vez que se ejecute el procedimiento, se crea una nueva en memoria, y la anterior se queda inaccesible, dicho de otro modo, perdida en la memoria RAM.

No uses TStringList.Create al inicio del procedimiento, úsalo, por ejemplo, al crear la ventana y destrúyelo al cerrar dicha ventana.

Para acceder a un elemento, siempre he usado Lista[Lista.Count-1]);

Saludos


La franja horaria es GMT +2. Ahora son las 13:44:05.

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