C/Visual C - Funcion para obtencion de directorios

 
Vista:

Funcion para obtencion de directorios

Publicado por Nico (2 intervenciones) el 15/05/2004 20:42:13
Hola tengo la duda de si existe una funcion en C que pasandole una ruta de un directorio te devuelva una cadena con los archivos que tiene y si es posible sus metadatos.Muchas Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Solo conozco una usando API Windows

Publicado por s (1 intervención) el 16/05/2004 19:04:21
Hola.

MIra, conozco 3 funciones que combinadas te proporcionan mas o menos lo que quieres( según lo que te entendí). El problema es que no son funciones de la biblioteca estandar de C, son de Microsoft Windows. Es decir, que necesitas tener el compilador de Visual C++ para usarlas. Si te interesan, responde este mensaje en el mismo foro y ahora sí te las paso. Ahorita no te las pongo porque quiero explicarte como se usan, para que puedas sacarles el mejor provecho.
(por cierto, ese correo que puse no sirve)

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Solo conozco una usando API Windows

Publicado por Nico (2 intervenciones) el 16/05/2004 20:45:19
Hola!Si que me interesarian estas 3 funciones puesto que el programa que quiero realizar quiero que corra sobre windows.Gracias por adelantado amigo!! 1 Saludo!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Aqui estan las funciones. Espero sirvan

Publicado por s (1 intervención) el 19/05/2004 00:02:18
<PRE>
Espero que no salga mal formateado el codigo. En caso de ser así,
me dices y te lo envio por correo. Cualquier duda, igual, por aca ando checando.

#include <windows.h> //necesitas incluir este forzosamente

WIN32_FIND_DATA find; //esta es una estructura necesaria para hacer la busqueda
HANDLE hSearch; //en programacion Windows necesitas un HANDLE para casi todo
char searchPattern[260] = {0}; //aqui se define una cadena con el patron de busqueda
int fileType; //esta variable se usara para saber lo que fue encontrado
int continueSearch = 1; //esto es para detener la busqueda o continuarla


//En concreto son tres funciones las que se manejan:
// 1.- FindFirstFile()
// 2.- FindNextFile()
// 3.- FindClose()
// Con la 1 inicias una búsqueda de archivos que siguen un determinado patron. Esta
// función solo te regresara el primer archivo que coincide con un patron.Un detalle
// Windows considera a varios elementos como directorios, pipes como si fueran archivos

// Con la segunda funcion obtienes uno por uno los archivos que coinciden con tu patron
// de busqueda. Algo muy importante es que los elementos que te regresa no estan en algún
// orden en concreto. Si los quieres ordenados, debes pasarlos por una funcion de ordenamiento
// como quicksort(). Si quieres saber como se usa esa función, me lo comentas.

// La tercera funcion lo único que hace es que libera los recursos que utilizamos durante
// la busqueda. No es esencial pero evitas degradar el desempeño.

// Aqui se define el patron de busqueda. Puede ser algo tan simple como una cadena vacia (no nula)
// con lo cual obtienes todos los archivos sin extension de un directorio. Para obtener todos los
// archivos (directorios incluidos) debes generar un patron de busqueda como
// "c:\directorio_donde_se_buscara\*.*"
//En el ejemplo que te pongo abajo, se buscan todos los archivos con extension .txt en el directorio
// c:\\mis documentos\\ (fijate que lleva doble \\ debido a que el \ es un caracter de escape en
// lenguaje C

sprintf(searchPattern,"%s*.txt", "c:\\mis documentos\\); // "c:\mis documentos\*.txt"

hSearch = FindFirstFile( searchPattern, &find ); //esta linea va tal cual

while( continueSearch != 0) //inicia un ciclo para buscar todo lo que tenga un .txt en el nombre
{
if( hSearch == INVALID_HANDLE_VALUE) //esto indica que no hay ningun archivo
return NULL; // con el patron deseado

fileType = find.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE; //este es muy importante

if( fileType == FILE_ATTRIBUTE_ARCHIVE ) //nos aseguramos que sea un archivo lo encontrado
{
printf("%s\n", find.cFileName); // la estructura find contiene varios elementos
// como el nombre del archivo, su tipo, etc.
// busca en la ayuda de MSDN para mas info.
}//if( fileType == FILE_ATTRIBUTE_ARCHIVE..

continueSearch = FindNextFile( hSearch, &find ); //se busca el siguiente archivo
//FindNextFile() regresa cero cuando ya se encontraron todos los archivos

}//while

FindClose( hSearch ); //termina la busqueda

return gZipFileName;
}

</PRE>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar