如何检查一个目录是否存在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 */
检查联机帮助页以获取更多信息。
答
使用执行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");
考虑到你的答案,我发现在Linux手册页的S_ISDIR“宏观”(特别是不OS X的手册页我一直在检查,虽然它适用于两者)利用ST_MODE。我不知道这是否是你的意思,但它是有效的,所以我很好;) – 2010-01-17 14:14:14
'S_ISDIR'宏比S_IFDIR'标志更受欢迎,因为后者可能会出现一些细微的问题。 – roguesys 2011-04-14 01:39:39