comprobar - Manera portátil para verificar si existe un directorio
saber si existe un archivo c# (3)
Me gustaría comprobar si existe un directorio determinado. Sé cómo hacer esto en Windows:
BOOL DirectoryExists(LPCTSTR szPath)
{
DWORD dwAttrib = GetFileAttributes(szPath);
return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}
y Linux:
DIR* dir = opendir("mydir");
if (dir)
{
/* Directory exists. */
closedir(dir);
}
else if (ENOENT == errno)
{
/* Directory does not exist. */
}
else
{
/* opendir() failed for some other reason. */
}
Pero necesito una forma portátil de hacer esto ... ¿Hay alguna manera de verificar si existe un directorio sin importar el sistema operativo que estoy usando? Tal vez C manera estándar de la biblioteca?
Sé que puedo usar las directivas de los preprocesadores y llamar a esas funciones en diferentes sistemas operativos, pero esa no es la solución que estoy pidiendo.
TERMINO CON ESTO, AL MENOS POR AHORA:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
int dirExists(const char *path)
{
struct stat info;
if(stat( path, &info ) != 0)
return 0;
else if(info.st_mode & S_IFDIR)
return 1;
else
return 0;
}
int main(int argc, char **argv)
{
const char *path = "./TEST/";
printf("%d/n", dirExists(path));
return 0;
}
Puede usar GTK glib para abstraerse de las cosas del sistema operativo.
glib proporciona una función g_dir_open() que debería hacer el truco.
Utilice boost::filesystem , que le dará una forma portátil de hacer ese tipo de cosas y abstraer todos los detalles desagradables para usted.
stat() funciona en Linux., UNIX y Windows:
#include <sys/types.h>
#include <sys/stat.h>
struct stat info;
if( stat( pathname, &info ) != 0 )
printf( "cannot access %s/n", pathname );
else if( info.st_mode & S_IFDIR ) // S_ISDIR() doesn''t exist on my windows
printf( "%s is a directory/n", pathname );
else
printf( "%s is no directory/n", pathname );