可移植的方式来检查目录是否存在

我想检查一个给定的目录是否存在。 我知道如何在Windows上做到这一点:

BOOL DirectoryExists(LPCTSTR szPath) { DWORD dwAttrib = GetFileAttributes(szPath); return (dwAttrib != INVALID_FILE_ATTRIBUTES && (dwAttrib & FILE_ATTRIBUTE_DIRECTORY)); } 

和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. */ } 

但我需要一个可移植的方式做到这一点..有什么办法来检查一个目录是否存在无论什么操作系统我使用? 也许C标准库的方式?

我知道我可以使用预处理器指令,并在不同的操作系统上调用这些函数,但这不是我要求的解决scheme。

我以此结束,至less现在:

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

stat()也适用于Linux,UNIX和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 ); 

使用boost :: filesystem ,这将给你一个可移植的方式做这些事情,并为你抽象所有丑陋的细节。

你可以使用GTK glib从操作系统的东西中抽象出来。

glib提供了一个g_dir_open()函数,它应该能够做到这一点。