Ver Mensaje Individual
  #1  
Antiguo 18-05-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Reputación: 19
MaMu Va por buen camino
Problema con TStringList variable

Resulta que, estoy haciendo una busqueda recursiva de archivos, pero... la extensión a buscar, la tomo de una selección de un CheckComboBox, donde figura un listado de extensiones que son tomadas de una base de datos access, lo que permite, agregar o quitar a gusto el tipo de extensión disponible a buscar, que luego se puede seleccionar o no desde el CheckComboBox. El procedimiento de búsqueda es el siguiente:

Código Delphi [-]
procedure BuscarArchivos(const directorio, mascara: string;
  atributos: Integer; var listado: TStrings);
  procedure Buscar(const subdirectorio: string);
  var
    regBusqueda: TSearchRec;
  begin
    if FindFirst(subdirectorio + mascara,atributos,regBusqueda) = 0 then
    begin
      try
        repeat
          Application.ProcessMessages;
          if (regBusqueda.Attr and faDirectory = 0)
            or (regBusqueda.Name <> '.')
              and (regBusqueda.Name <> '..') then
                listado.Add(subdirectorio + regBusqueda.Name);
        until FindNext(regBusqueda) <> 0;
      except
        FindClose(regBusqueda);
      end;
      FindClose(regBusqueda);
    end;
    if FindFirst(subdirectorio + '*', atributos
      or faDirectory, regBusqueda) = 0 then
    begin
      try
        repeat
          Application.ProcessMessages;
          if ((regBusqueda.Attr and faDirectory) <> 0)
            and (regBusqueda.Name <> '.')
              and (regBusqueda.Name <> '..') then
                Buscar(subdirectorio + regBusqueda.Name + '\');
        until FindNext(regBusqueda) <> 0;
      except
        FindClose(regBusqueda);
      end;
      FindClose(regBusqueda);
    end;
  end;
begin
  Buscar(IncludeTrailingPathDelimiter(directorio));
end;

Pero mi problema radica en que yo tengo que generar una StringList por cada extensión seleccionada, lo que puede ser una sola o cien!!!, yo con la lista lo que hago es tener el listado de archivos a copiar de una directorio a otro, pero no se como crear estas listas si no son fijas, son variables por el usuario segun su seleccion, la llamada al procedimiento es la siguiente:

Código Delphi [-]
var
  lista: TStrings;
  extension: string;
  i:integer;
begin
  lista := TStringList.Create;
//hay alguna extensión
 if OtroForm.CheckListBox1.Items.Count>0
 then begin 
  //me fijo que extensión está tildada
  for i:=0 to OtroForm.CheckListBox1.Items.Count-1 do
   begin
       if OtroForm.CheckListBox1.Checked[i]=True
         then  begin 
                extension:=OtroForm.CheckListBox1.ValueFromIndex[i];
                BuscarArchivos('C:\', '*.'+extension, faAnyFile, lista); 
                Justo acá tendría que iniciar la copia  de archivos 
antes que me cambie la lista por la siguiente extensión?
end
         else begin
             //abandono, hay extensiones, pero no se seleccionó ninguna
             Lista.Free;
             Exit;  
         end;
   end;
   lista.Free;     
  end
  else begin
      //abandono, no hay ninguna extensión
      lista.Free;
      Exit;
  end;     
end;

Esta bién la forma como lo hago? Mi pregunta esta marcada en rojo en el código de arriba. Acepto criticas y sugerencias o ideas alocadas como yo.

Saludos y gracias
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita