Ver Mensaje Individual
  #1  
Antiguo 02-01-2006
[Gunman] [Gunman] is offline
Miembro
 
Registrado: dic 2004
Ubicación: Pedreguer.
Posts: 355
Reputación: 20
[Gunman] Va por buen camino
Listar una carpeta

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...
__________________
l2prog.co.nr
Responder Con Cita