Estoy escribiendo un programa para verificar si algo es un archivo o es un directorio. ¿Hay una mejor manera de hacerlo que esto?Comprobando si un archivo es un directorio o solo un archivo
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
int isFile(const char* name)
{
DIR* directory = opendir(name);
if(directory != NULL)
{
closedir(directory);
return 0;
}
if(errno == ENOTDIR)
{
return 1;
}
return -1;
}
int main(void)
{
const char* file = "./testFile";
const char* directory = "./";
printf("Is %s a file? %s.\n", file,
((isFile(file) == 1) ? "Yes" : "No"));
printf("Is %s a directory? %s.\n", directory,
((isFile(directory) == 0) ? "Yes" : "No"));
return 0;
}
Al considerar casos de enlace simbólico, use lstat() en lugar de stat() ya que no sigue el enlace simbólico. – Sparky
Hay al menos una buena discusión en [Comprobando si existe un directorio] (http://stackoverflow.com/questions/3828192/checking-if-a-directory-exists-in-unix-system-call/), donde ' stat() 'y' lstat() 'se discuten y se describe el conjunto completo de tipos de archivos POSIX. Estoy tentado de duplicar esta pregunta a ese. El código también debe verificar el resultado de 'stat()' y manejar los errores de manera apropiada. –
@Jonathan, esa respuesta es de hecho más completa que la mía, y fue publicada tres meses antes que la mía, hace cinco años. Y no es como si mi propia respuesta desapareciera de todos modos. Veo que empuñas a Mjölnir en la etiqueta '[c]', así que gracias por comentar antes de actuar unilateralmente. Sin embargo, finalmente tienes razón. No se preocupe, haga lo que tiene que hacer :) –