Ver Mensaje Individual
  #3  
Antiguo 23-01-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Reputación: 22
ixMike Va por buen camino
Bueno, logré esto:

Código Delphi [-]
program listador;
{$APPTYPE CONSOLE}

uses Windows, SysUtils;

var
  Txt: TextFile;
  Nivel: Integer;

Function Espacios(Cantidad: Integer): String;
var
  S: String;
begin
  S:='';
  While Cantidad>0 do
    begin
      S:=S+'  ';
      Dec(Cantidad);
    end;
  Result:=S;
end;

Procedure Lista(Ruta: String);
var
  R: Integer;
  Info: TSearchRec;
begin
  //Listar directorios
  R:=FindFirst(Ruta + '*', faDirectory, Info);
  while R=0 do
    begin
      If not (Info.Name[1]='.') then  //No sabes la que arma con los directorios '.' y '..'
        begin
          WriteLn(Espacios(Nivel) + '|- ' + Info.Name);
          WriteLn(Txt, Espacios(Nivel) + '|- ' + Info.Name);
          Inc(Nivel);
          Lista(Ruta+Info.Name+'\');
          Dec(Nivel);
        end;
      R:=FindNext(Info);
    end;
  FindClose(Info);
  //Fin listar directorios

  // Listar archivos
  R:=FindFirst(Ruta + '*', faAnyFile, Info);
  while R=0 do
    begin
      WriteLn(Espacios(Nivel) + '|- ' + Info.Name + '  [Tamaño: ' + IntToStr(Info.Size) + ' Bytes]');
      WriteLn(Txt, Espacios(Nivel) + '|- ' + Info.Name + '  [Tamaño: ' + IntToStr(Info.Size) + ' Bytes]');
      R:=FindNext(Info);
    end;
  FindClose(Info);
  //Fin listar archivos
end;

{ La aplicación debe recibir dos parámetros:
  -El primero será la ruta donde buscar ("C:\", "D:\Mis aplicaciones"...)
  -El segundo, el fichero de texto donde se guardarán los datos
}

begin
  Nivel:=0;
  AssignFile(Txt, ParamStr(2));
  Rewrite(Txt);
  Lista(ParamStr(1));
  CloseFile(Txt);
end.


Pero tiene dos fallos. El primero es que al listar los directorios también lista los archivos. El segundo es que, al listar los archivos... ¡también aparecen los directorios!

¿Alguien sabe por qué pasa eso?


Salu2.

P.D.: También faltaría retocar el código un poco para que el árbol quede más bonito.
Responder Con Cita