我如何检查一个目录是否存在?
我如何检查目录是否存在于Linux的C?
你可以使用opendir()
并检查ENOENT == errno
是否失败:
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. */ }
使用下面的代码来检查文件夹是否存在。 它适用于Windows和Linux平台。
#include <stdio.h> #include <sys/stat.h> int main(int argc, char* argv[]) { const char* folderr; //folderr = "C:\\Users\\SaMaN\\Desktop\\Ppln"; folderr = "/tmp"; struct stat sb; if (stat(folderr, &sb) == 0 && S_ISDIR(sb.st_mode)) { printf("YES\n"); } else { printf("NO\n"); } }
您可以使用stat()
并将它传递给struct stat
的地址,然后检查其成员st_mode
是否设置了S_IFDIR
。
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> ... char d[] = "mydir"; struct stat s = {0}; if (!stat(d, &s)) printf("'%s' is %sa directory.\n", d, (s.st_mode & S_IFDIR) : "" ? "not "); // (s.st_mode & S_IFDIR) can be replaced with S_ISDIR(s.st_mode) else perror("stat()");
最好的方法可能是试图打开它,只是使用opendir()
。
请注意,最好尝试使用文件系统资源,并处理发生的任何错误,因为它不存在,而不仅仅是检查,然后再尝试。 后一种方法存在明显的竞争条件。
根据man(2)stat你可以在st_mode字段中使用S_ISDIRmacros:
bool isdir = S_ISDIR(st.st_mode);
注意,如果您的软件可以在其他操作系统上运行,我会推荐使用Boost和/或Qt4来简化跨平台的支持。
您也可以结合opendir
使用access
来确定目录是否存在,以及如果名称存在但不是目录。 例如:
/* test that dir exists (1 success, -1 does not exist, -2 not dir) */ int xis_dir (char *d) { DIR *dirptr; if (access ( d, F_OK ) != -1 ) { // file exists if ((dirptr = opendir (d)) != NULL) { closedir (dirptr); } else { return -2; /* d exists, but not dir */ } } else { return -1; /* d does not exist */ } return 1; }
我同意以下标题是最好的解决scheme之一:
#include <stdio.h> #include <sys/stat.h>
另外两种方式,也许不太正确的是使用。 第一个,只使用标准库和文件:
FILE *f; f = fopen("file", "r") if(!f) printf("there is no file there");
这个可能适用于所有的操作系统。
或者也可以使用系统调用system()来调用dirs。 是最糟糕的select,但给你另一种方式。 对于某人也许有用。