Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   listar ficheros (https://www.clubdelphi.com/foros/showthread.php?t=22930)

cuscus 01-07-2005 11:12:45

listar ficheros
 
alguien me puede decir como puedo listar los ficheros de un directorio y meterlos en un stringlist sin usar ningun componente grafico como el TFileListBox???

Casimiro Notevi 01-07-2005 11:28:35

Mira la función FindFirst, tienes un ejemplo en la ayuda de delphi.

Neftali [Germán.Estévez] 01-07-2005 12:43:46

Cita:

Empezado por cuscus
...alguien me puede decir como puedo listar los ficheros de un directorio y meterlos en un stringlist sin usar ningun componente grafico como el TFileListBox???

Pues sí, hace tiempo me hice una función justo para eso.:D

Código Delphi [-]
  {: Devuelve una lista de nombres de fichero encontrados a partir de la
     carpeta inicial StartDir, que cumplen el patrón especificado por
     FileMask.Mediante recursively se indica si se desea hacer la busqueda 
     en los subdirectorios.
 StartDir     Carpeta desde la que empezar a buscar.
 FileMask    Patrón que han de cumplir los ficheros.
 Recursively Si hay que continuar la búsqueda en los subdirectorios.
    FilesList    Lista con los nombres de fichero encontrados.
  }
  procedure FindFiles(StartDir, FileMask: string; recursively: boolean; var FilesList: TStringList);
  const
    MASK_ALL_FILES = '*.*';
    CHAR_POINT = '.';
  var
    SR: TSearchRec;
    DirList: TStringList;
    IsFound: Boolean;
    i: integer;
  begin
    if (StartDir[length(StartDir)] <> '\') then begin
      StartDir := StartDir + '\';
    end;
  
    // Crear la lista de ficheos en el directorio StartDir (no directorios!)
    IsFound := FindFirst(StartDir + FileMask, faAnyFile - faDirectory, SR) = 0;
    // MIentras encuentre
    while IsFound do  begin
      FilesList.Add(StartDir + SR.Name);
      IsFound := FindNext(SR) = 0;
    end;
  
    FindClose(SR);
  
    // Recursivo?
    if (recursively) then begin
      // Build a list of subdirectories
      DirList := TStringList.Create;
      // proteccion
      try
        IsFound := FindFirst(StartDir + MASK_ALL_FILES, faAnyFile, SR) = 0;
        while IsFound do
        begin
          if ((SR.Attr and faDirectory) <> 0) and
            (SR.Name[1] <> CHAR_POINT) then
            DirList.Add(StartDir + SR.Name);
          IsFound := FindNext(SR) = 0;
        end;
        FindClose(SR);
  
        // Scan the list of subdirectories
        for i := 0 to DirList.Count - 1 do
          FindFiles(DirList[i], FileMask, recursively, FilesList);
      finally
        DirList.Free;
      end;
    end;
  end;

cuscus 01-07-2005 12:49:58

muchas gracias a todos, veo que no me queda otra que usar el TSearchRec, es un componente que no me gusta mucho pero bueno. No se porque el primer next que le hago me devuelve algo extraño y tengo q saltarle

Neftali [Germán.Estévez] 01-07-2005 14:13:54

Bueno tú pedías no usar componentes gráficos, y aquí no se usa ninguno.

Cita:

Empezado por cuscus
...no me queda otra que usar el TSearchRec, es un componente que no me gusta mucho ...

TSearchRec no es un componente, es una estructura para guardar información y FindFirst, FindNext y FindClose son métodos (tampoco componentes).

Si no querías usar componentes, ni métodos, ni estructuras,... ¿Qué querías usar?

Casimiro Notevi 01-07-2005 14:22:18

También puedes ejecutar desde tu programa algo así como "dir > lista.txt" y luego leer el fichero lista.txt y meter las líneas en un stringlist o algo así.
Aunque esta solución sería un poco "chapuza" :D

cuscus 01-07-2005 16:01:47

Cita:

Empezado por Neftali
Bueno tú pedías no usar componentes gráficos, y aquí no se usa ninguno.


TSearchRec no es un componente, es una estructura para guardar información y FindFirst, FindNext y FindClose son métodos (tampoco componentes).

Si no querías usar componentes, ni métodos, ni estructuras,... ¿Qué querías usar?

no te lo tomes a mal hombre, si tu ayuda me ha servido de mucho, no he dicho q no me valga ni mucho menos, solo que en otros lenguajes como java hay clases mas potentes para estas cosas, solo eso, no era una critica a ti era una critica a delphi

vtdeleon 02-07-2005 01:44:12

Una broma
 
Saludos
Cita:

Empezado por Neftali
Si no querías usar componentes, ni métodos, ni estructuras,... ¿Qué querías usar?

Magia!!:D

cuscus 04-07-2005 10:01:38

pero cuando he dicho yo que no queria usar ningun componente ni ningun metodo ni ninguna estructura????????????????????????

Solo dije que TSearchRec no me gustaba mucho, no que no le quisiera usar y mucho menos que no quisiera usar nada mas.

Neftali [Germán.Estévez] 04-07-2005 10:55:07

Cita:

Empezado por cuscus
...no te lo tomes a mal hombre...

No me lo he tomado a mal, no te preocupes, y si el mensaje daba esa impresión, es que no me expresé bien... Era simplemente un comentario...

cuscus 05-07-2005 12:40:59

Cita:

Empezado por Neftali
No me lo he tomado a mal, no te preocupes, y si el mensaje daba esa impresión, es que no me expresé bien... Era simplemente un comentario...

Ok todo claro entonces ;-) y gracias de nuevo, funciono como me dijiste


La franja horaria es GMT +2. Ahora son las 19:07:24.

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