Portable way to check if directory exists [Windows/Linux, C]

c, directory, file, file-exists

Solution

stat() works on Linux., UNIX and Windows as well:

#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 );

Problem

I would like to check if a given directory exists. I know how to do this on Windows: ``` BOOL DirectoryExists(LPCTSTR szPath) { DWORD dwAttrib = GetFileAttributes(szPath); return (dwAttrib != INVALID_FILE_ATTRIBUTES && (dwAttrib & FILE_ATTRIBUTE_DIRECTORY)); } ``` and 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. */ } ``` But I need a portable way of doing this .. Is there any way to check if a directory exists no matter what OS Im using? Maybe C standard library way? I know that I can use preprocessors directives and call those functions on different OSes but thats not the solution Im asking for. I END UP WITH THIS, AT LEAST FOR NOW: ``` #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; } ```

Original source