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;
if OtroForm.CheckListBox1.Items.Count>0
then begin
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
Lista.Free;
Exit;
end;
end;
lista.Free;
end
else begin
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