我正在尝试查找某个路径是否是目录。
我使用以下代码使用<sys/stat.h>
中的stat函数:
int isDir(char *path){
printf("%s\n", path);
struct stat file;
stat(path, &file);
printf("%i\n", file.st_mode);
int x;
x = S_ISDIR(file.st_mode);
return x;
}
// I tried this function with the following code.
printf("%i\n", isDir("/home/aladdin"));
printf("%i\n", isDir("/home/aladdn"));
我在PC上的用户名为aladdin
,因此,第一个应该可以正常工作并且等于1
,第二个应该打印0
,因为没有用户名{{1} }}
所以运行前面的代码会给出
aladdn
对于什么是错的任何想法?
答案 0 :(得分:4)
您必须检查统计返回代码。如果stat失败,它将不会修改您的文件结构内容,在这种情况下,IS_DIR似乎返回true。
因此,不要使用当前行stat(path, &file);
,而是行:
if (stat(path, &file) == -1) return 0;
...当然你应该以某种方式报告错误,具体取决于你的要求,但这个简单的改变将修复你的功能。
至于为什么你得到相同的结果,我认为C留下像那样未初始化的结构,除非你明确地初始化它们,并且使用这种用法,结构将在第二次调用时在堆栈中完全相同的位置,所以它仍然具有第一次调用的值。但这只是机会,改变代码和行为的变化是不可预测的。 C很有趣:)
要将buf归零,请在使用&amp; file:
调用stat之前执行此操作 memset(&file, 0, sizeof file);