如何检查一个目录是否存在C

问题描述:

嗨,大家好,我对C相对陌生,所以如果这是一个愚蠢的问题,请原谅我,但我该如何检查FILE是否是目录?我有如何检查一个目录是否存在C

if (file == NULL) { 
    fprintf(stderr, "%s: No such file\n", argv[1]); 
    return 1; 
} 

并检查节点是否存在,但我想知道它是否是目录或文件。 我做了一些google搜索,我无法找到答案:\

感谢,

-Aaron

文件名本身不携带任何信息,他们是否存在与否,或者是否是一个目录与他们 - 有人可以改变它从你的下面。你想要做的是运行一个库调用,即stat(2),如果该文件存在或不存在以及它是什么,则返回报告。从手册页,

[ENOENT]   The named file does not exist. 

所以有一个错误代码报告(在errno中)该文件不存在。如果它确实存在,你可能希望检查它实际上是一个目录而不是一个普通的文件。您可以通过在返回的结构中检查st_mode来执行此操作:

The status information word st_mode has the following bits: 
... 
#define  S_IFDIR 0040000 /* directory */ 

检查联机帮助页以获取更多信息。

+1

考虑到你的答案,我发现在Linux手册页的S_ISDIR“宏观”(特别是不OS X的手册页我一直在检查,虽然它适用于两者)利用ST_MODE。我不知道这是否是你的意思,但它是有效的,所以我很好;) – 2010-01-17 14:14:14

+1

'S_ISDIR'宏比S_IFDIR'标志更受欢迎,因为后者可能会出现一些细微的问题。 – roguesys 2011-04-14 01:39:39

使用执行opendir尝试打开它作为一个目录。如果将返回一个空指针它显然不是一个目录:)

下面是你的问题的一个片段:

#include <stdio.h> 
    #include <dirent.h> 

    ... 

    DIR *dip; 
    if ((dip = opendir(argv[1])) == NULL) 
    {   
    printf("not a directory"); 
    } 
    else closedir(dip); 

如果您使用* nix,stat()。

struct stat st; 
if(stat("/directory",&st) == 0) 
     printf(" /directory is present\n");