如何在 C 中检查 Linux 上是否存在目录?
问问题
145295 次
6 回答
96
您可以使用opendir()
并检查是否ENOENT == errno
失败:
#include <dirent.h>
#include <errno.h>
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. */
}
于 2012-09-20T10:38:31.520 回答
51
使用以下代码检查文件夹是否存在。它适用于 Windows 和 Linux 平台。
#include <stdio.h>
#include <sys/stat.h>
int main(int argc, char* argv[])
{
const char* folder;
//folder = "C:\\Users\\SaMaN\\Desktop\\Ppln";
folder = "/tmp";
struct stat sb;
if (stat(folder, &sb) == 0 && S_ISDIR(sb.st_mode)) {
printf("YES\n");
} else {
printf("NO\n");
}
}
于 2014-07-03T02:44:45.227 回答
17
您可以使用stat()
并将 a 的地址传递给它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()");
于 2012-09-20T10:44:13.567 回答
11
最好的方法可能是尝试打开它,opendir()
例如使用。
请注意,最好尝试使用文件系统资源,并处理由于它不存在而发生的任何错误,而不是先检查然后再尝试。后一种方法存在明显的竞争条件。
于 2012-09-20T10:38:23.767 回答
4
根据man(2)stat您可以在 st_mode 字段上使用 S_ISDIR 宏:
bool isdir = S_ISDIR(st.st_mode);
旁注,如果您的软件可以在其他操作系统上运行,我建议使用 Boost 和/或 Qt4 来简化跨平台支持。
于 2014-01-15T22:45:24.180 回答
4
您还可以access
结合使用opendir
来确定目录是否存在,以及,如果名称存在,但不是目录。例如:
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
/* test that dir exists (1 success, -1 does not exist, -2 not dir) */
int
xis_dir (const char *d)
{
DIR *dirptr;
if (access ( d, F_OK ) != -1 ) {
// file exists
if ((dirptr = opendir (d)) != NULL) {
closedir (dirptr); /* d exists and is a directory */
} else {
return -2; /* d exists but is not a directory */
}
} else {
return -1; /* d does not exist */
}
return 1;
}
于 2014-07-03T03:33:16.163 回答