Desarrollo de un programa. Problema con el manejo de las funciones del directorio

Hola, soy de Venezuela y debo realizar la siguiente práctica:
Desarrollar un programa que permita solicitar como dato de entrada el nombre de un directorio cualquiera de una unidad de almacenamiento secundario, utilizando dicho nombre abrir el directorio y crear una lista con los nombres de los archivos que en dicho directorio se encuentran, es decir, la información de cada nodo de la lista será el nombre de un archivo existente en el directorio.
Cada elemento de la lista enlazada puede contener los siguientes campos:
struct tnodo
{
char nombre_arch[256];
struct tnodo *sig;
};
Una vez creada la lista, el programa mostrará un menú con las siguientes opciones:
1.Mostrar la lista.
2.Contar archivos.
3.SALIR.
Y por supuesto, deberá implementar cada una de las cuarto opciones: insertar un archivo, eliminar un archivo, buscar un archivo, modificar un archivo (nombre de archivo).
Notas: para leer los datos de los archivos de un cierto directorio puede utilizar las primitivas opendir(), closedir(), readdir().
AQUÍ ES DONDE ESTÁ MI PROBLEMA, No se como se manejan las funciones de directorio, se como crear la lista y el menú además de las opciones adicionales, lo que no entiendo es como voy a utilizar las primitivas opendir, closedir y readdir, y como voy a guardar los nombres de los archivos del directorio, o sea si se capturan o si al utilizar readdir se muestra el nombre del directorio, porque en la ayuda de C++ hay un ejemplo pero no entiendo que significa la estructura struct dirent *ent, o sea que campos tiene ese registro, si ent->d_name es el campo del nombre de archivo o que.
POR FAVOR AYUDENME LO NECESITO URGENTE, U R G E N T E!, Es para mañana Lunes, solo explíquenme como se manejan esas funciones, sus parámetros, etc. GRACIAS DE ANTEMANO. Observación: no pido que me den el código del programa, al menos una orientación...
1

1 Respuesta

1.050 pts. Tengo gran experiencia en programacion en C,C++...
Aquí te pongo un código con un ejemplo que funciona bien en C, así como en C++, quizá debas modificar un poco. La parte de Guardar en una tabla o imprimir ya son ajustes sencillos que puedes hacer sin problema solo crea una matriz y ya, pues la función tree que te pongo del programa te ira llenando esto.
Espero te sirva y sea útil.
Ismagal.
/******************************************************
tree.c
tree [opciones] directorio
Opciones:
-f muestra archivos y directorios recursivamente
**************************/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
main (int argc,char *argv[])
{
char temp[500];
int i,j;
if(argc < 1){
fprintf (stderr,"Dar directorio\n");
exit (0);
}
sprintf (temp,"%s",argv[1]);
tree (temp); return;
}
tree (char path[500])
{
DIR *dirp;
struct dirent *dp;
static nivel = 0;
struct stat buf;
int ok,i,j;
char archivo[256],tipo_a;
if((dirp = opendir (path)) == NULL){
printf ("error abriendo directorio"); return;
}
//saltamos las primeras 2 lineas de . y ..
/* rewinddir(dirp);
j=telldir(dirp);
printf("j=[%ld]\n",j);
seekdir(dirp,j);
seekdir(dirp,2); */
i = j = ok = 0;
while((dp = readdir (dirp)) != NULL){
j++;
if(j > 2){ //esto es para brincar las prim lineas no funciono seek
sprintf (archivo,"%s/%s",path,dp->d_name);
ok = stat (archivo,&buf);
//si el archivo es subdir llamamos nuevamente a tree
if((ok != -1) && ((buf.st_mode & S_IFMT) == S_IFDIR)){
for(i = 0; i < nivel; i++)printf (" ");
printf ("(d) %s\n",dp->d_name);
++nivel;
tree (archivo);
--nivel;
}
else if(ok != -1){
for(i = 0; i <= nivel; i++) printf (" ");
switch(buf.st_mode & S_IFMT){
case S_IFREG:
if(buf.st_mode & 01111)tipo_a = 'x';
else tipo_a = 'o';
break;
case S_IFCHR:
tipo_a = 'c'; break;
case S_IFBLK:
tipo_a = 'b'; break;
case S_IFIFO:
tipo_a = 'p'; break;
default:
tipo_a = '?';
}
printf ("(%c) %s\n",tipo_a,dp->d_name);
}
}
}
closedir (dirp);
}
Como veras hay código comentado, pruébalo y modifícalo a tu gusto, esto es un ejemplo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas