if (file == NULL) {
fprintf(stderr, "%s: No such file\n", argv[1]);
return 1;
}
并检查节点是否存在,但我想知道它是dir还是文件。 我做了一些谷歌搜索,我找不到答案:\
谢谢,
-Aaron
答案 0 :(得分:6)
文件名本身不包含任何关于它们是否存在的信息,或者它们是否是与它们同步的目录 - 有人可以从您下面更改它。你想要做的是运行一个库调用,即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 :(得分:6)
struct stat st;
if(stat("/directory",&st) == 0)
printf(" /directory is present\n");
答案 2 :(得分:4)
使用opendir尝试将其作为目录打开。如果返回空指针,则显然不是目录:)
以下是您问题的摘录:
#include <stdio.h>
#include <dirent.h>
...
DIR *dip;
if ((dip = opendir(argv[1])) == NULL)
{
printf("not a directory");
}
else closedir(dip);
答案 3 :(得分:0)
如果你正在使用* nix,stat()。