Pregunta sobre manejo de directorio..

Necesito hacer una especie de motor de búsqueda de datos, pero en mi pc. Este motor debe ser como el google o altavista, onda ponerle unas cuantas palabras y buscar y mostrar todas las páginas en que haya concordancia. Para esto debo utilizar búsqueda secuencial y una tabla de hash. Esto ya lo tengo hecho, pero el problema lo tengo en el manejo del directorio donde están los documentos (que simulan las páginas web), ya que para realizar la búsqueda en todos estos debo modificar el programa manualmente y decirle en que fichero quiero hacer la consulta, onda:
FILE *fp;
if (!(fp=fopen("arch_num_X.XXX","r"))) exit(1);
Lo que busco es poder realizar una búsqueda en todos los documentos de aquel directorio.
Por favor si puedes ayudarme, ya que lo necesito con urgencia...
Se despide desde chile -->FELIPE ;-)

1 respuesta

Respuesta
1
no se si estas programando en c, c++ o visual c++, pero te cuento para todos los casos.
En c y c++ estandar:
existen las funciones
findfirst(const char* camino, struct ffblk* ffblk, int attrib);
camino = puntero a char que contiene el nombre del directorio donde realizar la busqueda.
ffblk = puntero a la estructura ffblk que es del tipo
struct ffblk {
char ff_reserverd[21]; // reservada por DOS
char ff_attrib; // atributo del archivo
int ff_time; // hora archivo
int ff_date; // fecha archivo
long ff_size; // tamaño archivo
char ff_name[13]; // nombre archivo
}
attrib = puede valer las siguientes constantes:
FA_RDONLY // solo lectura
FA_HIDDEN // oculto
FA_SYSTEM // archivo de sistema
FA_LABEL // etiqueta de volumen
FA_DIREC // directorio
FA_ARCH // bit de archivo activado
Esta funcion lo que hace es preparar el camino a la siguiente funcion:
#include "dos.h"
#include "dir.h"
findnext(struct ffblk* ffblk);
Esta función va recorriendo el directorio encontrando los archivos existentes y rellenando la estructura ffblk con la información.
Para VisualC++ usando MFC:
HANDLE hFind = FindFirstFile(char* path, WIN32_FIND_DATA* st);
path = directorio donde buscar
WIN32_FIND_DATA = estructura parecida a ffblk donde se rellena la informacion del fichero.
HANDLE = manejador que usara la siguiente funcion
FindNextFile(hFind, &st2);
hFind = HANDLE obtenido de la funcion FindFirstFile
st = WIN32_FIND_DATA que se rellena con la informacion del fichero. El campo donde aparece el nombre del fichero es cFileName. (st->cFileName)
La forma de proceder en ambos casos es primero usar la función findfirst o FindFirstFile para preparar la búsqueda y luego ir usando la función findnext o FindNextFile para ir obteniendo los ficheros y directorios del directorio donde busques, entonces en tu caso te sitúas en el directorio raíz de tu ordenador (c:) y usas
struct ffblk st;
findfirst("c:\\*.*",&st,0);
y luego vas usando en un for:
findnext(&st);
if (st.ff_attrib == FA_ARCH)
es un archivo abrele y busca la cadena
if (st.ff_attrib == FA_DIREC)
Es un directorio copia el nombre y realiza un nuenvo findfirst y findnext dentro de este directorio.
Con FindFirstFile y FindNextFile pues igual teniendo en cuenta que el campo de los atributos es
dwFileAttributes y puede valer FILE_ATTRIBUTE_ARCHIVE y FILE_ATTRIBUTE_DIRECTORY

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas