如何检查目录是否存在?

时间:2012-09-20 10:36:39

标签: c linux directory

如何在C中检查Linux上是否存在目录?

7 个答案:

答案 0 :(得分:73)

您可以使用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. */
}

答案 1 :(得分:34)

使用以下代码检查文件夹是否存在。它适用于Windows和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");
    }
}

答案 2 :(得分:15)

您可以使用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()");

答案 3 :(得分:8)

最好的方法可能是尝试打开它,例如只使用opendir()

请注意,最好是尝试使用文件系统资源,并处理由于它不存在而发生的任何错误,而不仅仅是检查然后再尝试。后一种方法存在明显的竞争条件。

答案 4 :(得分:4)

根据man(2)stat,您可以在st_mode字段上使用S_ISDIR宏:

bool isdir = S_ISDIR(st.st_mode);

旁注,如果您的软件可以在其他操作系统上运行,我建议使用Boost和/或Qt4来简化跨平台支持。

答案 5 :(得分:2)

您还可以将accessopendir结合使用,以确定目录是否存在,以及名称是否存在,但不是目录。例如:

/* 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);
        } else {
            return -2; /* d exists, but not dir */
        }
    } else {
        return -1;     /* d does not exist */
    }

    return 1;
}

答案 6 :(得分:-7)

另外两种方式,可能不太正确就是使用。 第一个,仅使用标准库和仅用于文件:

FILE *f;
f = fopen("file", "r")
if(!f)
   printf("there is no file there");

这个可能适用于所有操作系统。

或另一个也是dirs,使用系统调用system()。是最糟糕的选择,但给你另一种方式。对于某些可能有用的人。