Problema con S_ISDIR () el resultado en C (tal vez porque stat () no está configurando su estructura correctamente?)
Quiero que mi programa tome un directorio, luego imprima el contenido de ese directorio e indique si cada elemento es un directorio o no. Si le doy un directorio que contiene los archivos F1.txt y F2.txt y las carpetas D1, D2 y D3, debería imprimir:
F1.txt no es directorio
F2.txt no es directorio
D1 es directorio
D2 es directorio
D3 es directorio
char* curr[100];
DIR* dirp = opendir(name);
struct dirent* x;
struct stat fstat;
//go to each file til readdir gives NULL
while((x = readdir(dirp)) != NULL) {
//store name of file
curr[0] = (x -> d_name);
//ignore files starting with "."
if(*curr[0] == '.')
continue;
//set status
stat(curr[0], &fstat);
//print file name
printf("%s", *curr);
//check if it's a directory and print result
if(S_ISDIR(fstat.st_mode))
printf(" is directory\n");
else
printf(" is not directory\n");
}
Esto se imprime diciendo que todos los archivos no son directorios. Si elimino la parte que ignora los archivos que comienzan con ".", Dice F1.txt, F2.txt y D1 no son directorios, y eso., D2, D3 y .. son directorios (en ese orden). Eso me hace pensar que el problema está en la llamada a las estadísticas en lugar de mi uso de las macros, pero estoy bastante confundido aquí, así que no lo sé.