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>