MaMu
19-06-2007, 00:09:09
Resulta que yo escaneo constantemente un directorio, para saber si hay algun subdirectorio nuevo, y si lo hay o no lo hay, lo cargo en un StringList (este lo creo al crearse la form y lo libero al cerrar la misma, sin problemas)
Utilizo la siguiente function:
function NumeroSubDirectorios(directorio: string;
ocultos, sistema, soloLectura: boolean) : integer;
var
SR: TSearchRec;
atributos: Cardinal;
begin
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
Lista.Add(SR.Name);
Inc(Result);
end;
until FindNext(SR) <> 0;
SysUtils.FindClose(SR);
end;
end;
Pero si bien, puedo mostrar el resultado de la funcion conrrectamente, ya que cuenta bien, no me pasa lo mismo con la Lista (TStringList), ya que no siempre me muestra el ultimo directorio que cuenta en:
Label1.Caption:=Lista.Strings[Lista.Count-1];
En ciertos casos me añade como ultimo elemento al anterior, es decir lo repite, y a veces no. Esto lo pruebo copiando directorios al directorio que estoy escanenando. Porque pasa esto????
Saludos
Utilizo la siguiente function:
function NumeroSubDirectorios(directorio: string;
ocultos, sistema, soloLectura: boolean) : integer;
var
SR: TSearchRec;
atributos: Cardinal;
begin
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
Lista.Add(SR.Name);
Inc(Result);
end;
until FindNext(SR) <> 0;
SysUtils.FindClose(SR);
end;
end;
Pero si bien, puedo mostrar el resultado de la funcion conrrectamente, ya que cuenta bien, no me pasa lo mismo con la Lista (TStringList), ya que no siempre me muestra el ultimo directorio que cuenta en:
Label1.Caption:=Lista.Strings[Lista.Count-1];
En ciertos casos me añade como ultimo elemento al anterior, es decir lo repite, y a veces no. Esto lo pruebo copiando directorios al directorio que estoy escanenando. Porque pasa esto????
Saludos