我想使用stat
检查给定的参数是否是目录。该程序有两个参数:当第一个参数不是目录或它不存在时,代码可以正常工作。
但是当第一个参数是一个目录并且存在,并且第二个参数不存在时,程序说它们都存在 - 结果错误。我想知道为什么它不起作用。
#include <stdio.h>
#include <sys/stat.h>
int main(int n, char **argv)
{
char *dir_1=argv[1], *dir_2=argv[2];
if (is_dir(dir_1) == 0)
printf("Directory %s exists.\n", dir_1);
else
printf("Directory %s does not exist.\n", dir_1);
if (is_dir(dir_2) == 0)
printf("Directory %s exists.\n", dir_2);
else
printf("Directory %s does not exist.\n", dir_2);
}
int is_dir(char *file)
{
struct stat file_stat;
stat(file, &file_stat);
return( (S_ISDIR(file_stat.st_mode)) ? 0 : -1);
}
答案 0 :(得分:1)
这个答案是接着被接受了。 MSVC中不存在 [self.parentView addConstraint:self.constraintX];
,而是S_ISDIR
。替换后,编译器通知_S_IFDIR
没有返回值。原因是,is_dir()
是一个掩码,而不是一个函数。因此,在对代码进行一些调整之后,我得到了这个有效。
_S_IFDIR
节目输出:
#include <stdio.h>
#include <sys/stat.h>
int is_dir(char *file)
{
struct stat file_stat;
if (stat(file, &file_stat) == 0) // check it worked
return file_stat.st_mode & _S_IFDIR; // it's a status mask
return 0;
}
int main(int argc, char **argv) // conventional ids
{
char *dir_1, *dir_2;
if (argc < 3) return 0; // check silliness
dir_1=argv[1];
dir_2=argv[2];
if (is_dir(dir_1)) // reversed the logic
printf("%s is a Directory.\n", dir_1);
else
printf("%s is not a Directory.\n", dir_1); // better text
if (is_dir(dir_2))
printf("%s is a Directory.\n", dir_2);
else
printf("%s is not a Directory.\n", dir_2);
return 0;
}
反之亦然:
>test test.c wtest
test.c is not a Directory.
wtest is a Directory.