• Jueves 2 de Mayo de 2024, 02:58

Autor Tema:  Bucle Para Recorrer Directorios  (Leído 6222 veces)

okap

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Bucle Para Recorrer Directorios
« en: Lunes 28 de Mayo de 2007, 13:15 »
0
Hola a todos.
Necesito crearme un bucle para recorrerme todos los directorios del disco para poder buscar un determinado archivo.
Lo que necesito es saber en que directorio estoy en cada momento y poder controlar el entrar a los subdirectorios y luego salirme y continuar la busqueda.
En aquellos directorios donde encontrase el archivo que busco me lo guardaría la ruta en un fichero y luego ya haría la acción pertinente.
He estado mirando en el sysutils y veo funciones que me realizan busquedas o borrado de ficheros, pero digamos que lo quiero controlar yo. Quiero tener, por decirlo de alguna manera, el control de saber por que directorio me estoy moviendo. Desconozco si hay alguna función o manera de lograr esto.
Si alguno de vosotros os habeis visto con la misma necesidad agradecería mucho vuestra ayuda.
Muchas gracias por todo.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Bucle Para Recorrer Directorios
« Respuesta #1 en: Lunes 28 de Mayo de 2007, 13:45 »
0
En la API de Windows existen funciones que sirven para hacerlo:
FindFirstFile
FindNextFile

En los dos paginas tenes el enlace a un ejemplo de como usarlas.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

okap

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: Bucle Para Recorrer Directorios
« Respuesta #2 en: Lunes 28 de Mayo de 2007, 17:28 »
0
He mirado lo que me has comentado y voy encaminado pero no consigo la solución a mi problema ya que quiero realizar una busqueda partiendo del directorio raiz y entrando en todos los directorios y subdirectorios para buscar el archivo deseado.
  Lo más que he llegado a conseguir es el código que te remito pero no sé como indicarle el directorio inicial por el que tiene que empezar. Además el handle que le paso a la función 'FindNextFile' me dice que es invalido.
  Espero que me puedas guiar un poco.
  Gracias por todo.

  WIN32_FIND_DATA FindFileData;
  HANDLE hFind = INVALID_HANDLE_VALUE;
  AnsiString errorDevuelto = "";
  Memo1->Clear();

  bool continuarBusqueda = true;
  AnsiString ruta_archivo = "c:\*.lck";
  hFind = FindFirstFile(ruta_archivo.c_str(), &FindFileData);

  while(continuarBusqueda)
  {
    continuarBusqueda = FindNextFile(hFind, &FindFileData);
    Memo1->Lines->Add(FindFileData.cFileName);
  }//fin del while
  FindClose(hFind);

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Bucle Para Recorrer Directorios
« Respuesta #3 en: Lunes 28 de Mayo de 2007, 18:29 »
0
Hay un campo en la estructura WIN32_FIND_DATA llamado dwFileAttributes, con ese podes determinar si es un directorio o un archivo (FILE_ATTRIBUTE_DIRECTORY). Despues tenes que formar el nombre partiendo de tu directorio raiz:

Raiz (sin la parte de busqueda de archivo obviamente) + \ (yo siempre hago una funcion que comprueba si tiene barra final y la agrega de ser necesario) cFileName + \ y la parte de la busqueda (*.lck en este caso). Con eso llamas a tu funcion recursivamente y te recorre todos los subdirectorios necesarios, los dos primeros son . y .., ignoralos.

PD. Fijate que las \ en C tenes que ponerlas dobles (\\) ya que es el caracter de escape por defecto.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

okap

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: Bucle Para Recorrer Directorios
« Respuesta #4 en: Martes 29 de Mayo de 2007, 10:48 »
0
Muchas gracias por la ayuda que me has prestado.
Me ha sido de gran ayuda, no había caido en indicar mediante la propiedad dwFileAttributes para referirme a los directorios.
Gracias de nuevo.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Bucle Para Recorrer Directorios
« Respuesta #5 en: Martes 29 de Mayo de 2007, 10:49 »
0
Cita de: "okap"
Muchas gracias por la ayuda que me has prestado.
Me ha sido de gran ayuda, no había caido en indicar mediante la propiedad dwFileAttributes para referirme a los directorios.
Gracias de nuevo.
De nadas  B)

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.