PDA

Ver la Versión Completa : listar ficheros


cuscus
01-07-2005, 11:12:45
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
...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


{: 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.

...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
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
SaludosSi 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
...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
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