saber - comprobar si existe un archivo c++
C manera más rápida de comprobar si existe un directorio (5)
Considere el uso de stat
. S_ISDIR(s.st_mode)
le dirá si es un directorio.
Muestra:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
...
struct stat s;
int err = stat("/path/to/possible_dir", &s);
if(-1 == err) {
if(ENOENT == errno) {
/* does not exist */
} else {
perror("stat");
exit(1);
}
} else {
if(S_ISDIR(s.st_mode)) {
/* it''s a dir */
} else {
/* exists but is no dir */
}
}
...
Estoy usando la función opendir para verificar si existe un directorio. El problema es que lo estoy usando en un bucle masivo y está inflando el ram utilizado por mi aplicación.
¿Cuál es la mejor manera (más rápida) de verificar si existe un directorio en C? ¿Cuál es la mejor manera (más rápida) de crearlo si no existe?
Parece que tienes una pérdida de memoria. Llamar a opendir no debe inflar la RAM de su aplicación siempre y cuando recuerde que siempre debe llamar a closedir después de abrir con éxito un directorio. Además, asegúrese de liberar todos los búferes que asignó para calcular el nombre del directorio.
Podrías llamar a mkdir()
. Si el directorio no existe, se creará y se devolverá 0
. Si el directorio existe, se devolverá -1
y errno
se establecerá en EEXIST
.
Prefiero usar el access()
if (0 != access("/path/to/possible_dir/", F_OK)) {
if (ENOENT == errno) {
// does not exist
}
if (ENOTDIR == errno) {
// not a directory
}
}
Si se asegura un final /
en el nombre del directorio, esto funciona perfectamente.
Yo usaría stat()
, si está disponible.