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

Aar*_*now 2 c filesystems directory

嘿伙计们,我对C比较陌生,所以请原谅我这是一个愚蠢的问题,但我怎样才能检查FILE是否是一个目录?我有

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

并检查节点是否存在,但我想知道它是dir还是文件.我做了一些谷歌搜索,我找不到答案:\

谢谢,

-Aaron

Ste*_*ker 6

文件名本身不包含任何关于它们是否存在的信息,或者它们是否是与它们同步的目录 - 有人可以从您下面更改它.你想要做的是运行一个库调用,即stat(2),它报告文件是否存在以及它是什么.从手册页中,

[ENOENT]           The named file does not exist.
Run Code Online (Sandbox Code Playgroud)

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

The status information word st_mode has the following bits:
...
#define        S_IFDIR  0040000  /* directory */
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请查看联机帮助页.


gho*_*g74 6

struct stat st;
if(stat("/directory",&st) == 0) 
        printf(" /directory is present\n");
Run Code Online (Sandbox Code Playgroud)