Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/12/2009, 08:11
Dniel
 
Fecha de Ingreso: diciembre-2009
Mensajes: 51
Antigüedad: 14 años, 6 meses
Puntos: 1
Mostrar directorios y contenido de ficheros .txt.

Buenas, qué tal:

Estoy realizando un programa que recibe dos parámetros, siendo el primero la ruta de un directorio y el segundo un valor numérico.

El programa en cuestión debe mostrar el contenido del directorio pasado por parámetro, el número de caracteres pasado como segundo parámetro de los ficheros de texto que encuentre en el mismo, además del número de elementos de los directorios que haya en este, por ejemplo, si el directorio /home/Prueba contiene los siguientes archivos:

leeme.txt
prueba.c
cosa.pdf
autores.txt
doc/
documento.txt
privado/
secreto.jpeg
altosecreto.pdf
publico/
listado.txt
prueba.pdf
archivo/
basedatos.mdb
prologo.txt

Y se ejecuta el comando ./listadoFichero /home/Prueba 7, la salida debe ser:

Listado de "/home/informatica/pruebalistacosas"
Fichero leeme.txt: primeros 7 caracteres [Esto es]
Fichero prueba.c
Fichero cosa.pdf
Fichero autores.txt: primeros 7 caracteres [Luis Ma]
Directorio doc: 4 elementos dentro
Directorio archivo: 1 elemento dentro
Fichero prologo.txt: primeros 7 caracteres [Este pr]
Fin del listado

Pues bien, tengo el siguiente código:

Código:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>

int main(int argc, char *argv[]){

    DIR *dir;
    struct dirent *directorio;

    if((dir = opendir(argv[1])) == NULL){
        perror("La ruta especificada no existe.\n");
        exit(-1);
    }

    printf("Listado de: %s\n\n", argv[1]);

    while((directorio = readdir(dir)) != NULL){
        if((strcmp(directorio->d_name, ".") != 0) && (strcmp(directorio->d_name, "..") != 0)){
            printf("%s\n", directorio->d_name);
        }
    }

    printf("\nFin del listado");

    closedir(dir);

    return 0;

}
El cual muestra los directorios y archivos del directorio especificado, no obstante, no sé cómo comprobar si un archivo es un directorio o un fichero, he intentado utilizar las funciones S_ISDIR y S_ISREG, pero no funcionan correctamente, si alguien tiene alguna idea de cómo funcionaría correctamente, que lo postee si no es demasiada molestia.

Gracias de antemano.