Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Listar el contenido de un directorio (https://www.clubdelphi.com/foros/showthread.php?t=57498)

Alexandro 17-06-2008 19:27:30

Listar el contenido de un directorio
 
Hola a todos: Necesito saber como puedo selecionar un directorio (con un ShellTreeView digamos) y en un ListBox, Memo, etc... ver el contenido dentro de dicho directorio y que me incluya subcarpetas. En el formulario tengo un ShellTreeView, un boton y un ListBox. Yo quiero que al seleccionar una carpeta con el Shell... y dar clic en el botón, el ListBox me muestre todos los archivos que contiene la carpeta seleccionada. Uso delphi7. Win XP SP2. Salu2 y suerte. Espero me ayuden Chao

juanlaplata 17-06-2008 20:08:05

esto es lo que yo hago, en el evento OnChange del ShellTreeView, y no depende del boton
Código Delphi [-]
procedure TForm1.ShellTreeView1Change(Sender: TObject; Node: TTreeNode);
begin // lista1 = TFileListBox
Lista1.Directory:= ShellTreeView1.Path;
end;

GaaK 17-06-2008 20:13:28

El siguiente es un procedure asignado a un botón que borra los Documentos Recientes:
Código Delphi [-]
procedure TfrmMain.btnOkClick(Sender: TObject);
var
  sPath: String;
  SR: TSearchRec;
begin
    sPath := 'C:\Documents and Settings\Propietario\Recent';
    if sPath[Length(sPath)]<>'\' then sPath := sPath+'\';
    if FindFirst(sPath+'*.*', faAnyFile, SR) = 0 then begin
      repeat
        if (SR.Attr <> faDirectory) then begin
          DeleteFile(sPath+SR.Name);
        end;
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
end;
... en lugar del DeleteFile usted podría usar Memo1.Lines.Add o algo parecido sabiendo que el nombre es SR.Name.

- Gaak -

coso 17-06-2008 20:56:03

Existe el componente filelistbox que hace exactamente eso.

Alexandro 17-06-2008 21:29:56

Listar el contenido de un directorio
 
Gracias a todos: Miren, lo que busco es como Gaak dice. Algo así, pero el problema con lo que expone Gaak es que no me muestra el contenido de las subcarpetas que estan dentro de la carpeta escogida por mi. Solo deja ver los ficheros que estan en ese directorio y pasa por alto las carpetas incuidas dentro. Como puedo modificar ese mismo procedure para obtener el resultado que busco?
Gracias de antemano.

coso 17-06-2008 21:32:08

el componente filelistbox tiene la propiedad, dentro de filetype, lfdirectory. Ponla a true y te mostrará tb los directorios.

coso 17-06-2008 21:35:13

si quieres usar el codigo de gaak, fijate para q sirve la linea
Código Delphi [-]
    if (SR.Attr <> faDirectory) then

saludos

Alexandro 17-06-2008 21:58:37

Listar el contenido de un directorio
 
Coso:
A lo que te refieres
Código Delphi [-]
(SR.Attr <> faDirectory)
es solo para que el acepte carpetas si es = o ficheros si es <>.
Si tengo que usar el FileListBox es =, cuando doy true la la propiedad ftDirectory solo me muestra los directorios que hay en el. Eso esta bien pero no me muestra lo que hay en esa subcarpeta.
Espero que me puedan ayudar.
Muchas gracias

coso 17-06-2008 21:59:55

Ok te entendi mal. Debes usar recursividad :

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
        st : TStringList;
begin
        st := TStringList.Create;
        AddPath('o:\temp',st);
        ListBox1.Items.Text := st.Text;
        st.Free;
end;
procedure TForm1.AddPath(s : string; st : TStringList);
var
  SR: TSearchRec;
begin

    if s[Length(s)]<>'\' then s := s + '\';
    if FindFirst(s+'*.*', faAnyFile, SR) <> 0 then exit; 

    repeat
       if (SR.Attr <> faDirectory) then st.Add(s+SR.Name);
       if (SR.Attr = faDirectory) and (SR.Name <> '..') and (SR.Name <> '.') then AddPath(s+SR.Name,st);
    until FindNext(SR)<>0;

    FindClose(SR);
end;

saludos

coso 17-06-2008 22:27:04

vaya...ahora busque en el foro . Espero que de tanto reinventar la rueda no nos salga cuadrada :D

Alexandro 19-06-2008 13:22:22

Listar el contenido de un directorio
 
Coso 100 000 de gracias por todo. Y a todos los que me respondienron = de gracias. Ya me funcionó. Continuen así.
Suerte y salu2


La franja horaria es GMT +2. Ahora son las 15:20:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi