Estaba intentando copiar (o cortar) una carpeta (Raíz), la idea es que primero me meta todos los archivos y carpetas (recursivamente, es decir, los ke estan dentro de estos también hasta el infinito y más allá) y luego con la función CopyFile ir item por item de la lista copiando a la nueva ruta, el problema está en listar los archivos recursivamente, tengo este procedimiento:
Código Delphi
[-]
procedure PasteIfIsFolder(Folder: String; List: TStrings);
var
SearchRec: TSearchRec;
begin
if FindFirst(IncludeTrailingPathDelimiter(Folder)+'*.*', faAnyFile and not
faSysFile, SearchRec) = 0 then
repeat
if (SearchRec.Name <> '.') or (SearchRec.Name <> '..') then
begin
List.Add(IncludeTrailingPathDelimiter(Folder)+SearchRec.Name);
if DirectoryExists(IncludeTrailingPathDelimiter(Folder)+
SearchRec.Name) then
PasteIfIsFolder(IncludeTrailingPathDelimiter(Folder)+
SearchRec.Name, List);
end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
Lo implemento de la siguiente forma, en el TAction de Copiar:
Código Delphi
[-]
procedure TMainFRM.CopyActExecute(Sender: TObject);
begin
if (ExplorerList.ItemIndex >= 0) then
begin
CutCopy.Folder := IncludeTrailingPathDelimiter(CurrLocalPath);
CutCopy.FileName := ExplorerList.Selected.Caption;
CutCopy.Option := tcoCopy;
PasteAct.Enabled := True;
if Copy(ExplorerList.Selected.SubItems[3],1,1) = 'D' then
begin
CutCopy.IsFolder := True;
PasteIfIsFolder(CutCopy.Folder+CutCopy.FileName,ListBox1.Items);
end
else
CutCopy.IsFolder := False;
end;
end;
El problema es que el procedimiento recursivo no está bien, porque me hace un bucle que nunca termina. Cuál es el fallo? Espero haberme explicado bien, ando un poco liado...