S_ISDIR()的问题导致C(可能因为stat()没有正确设置它的结构?)

我希望我的程序获取一个目录,然后打印该目录的内容并说明每个项目是否是目录。 如果我给它一个包含文件F1.txt和F2.txt以及文件夹D1,D2和D3的目录,它应该打印:

F1.txt不是目录
F2.txt不是目录
D1是目录
D2是目录
D3是目录

char* curr[100]; DIR* dirp = opendir(name); struct dirent* x; struct stat fstat; //go to each file til readdir gives NULL while((x = readdir(dirp)) != NULL) { //store name of file curr[0] = (x -> d_name); //ignore files starting with "." if(*curr[0] == '.') continue; //set status stat(curr[0], &fstat); //print file name printf("%s", *curr); //check if it's a directory and print result if(S_ISDIR(fstat.st_mode)) printf(" is directory\n"); else printf(" is not directory\n"); } 

这打印说所有文件都不是目录。 如果我删除忽略以“。”开头的文件的部分,则表示F1.txt,F2.txt和D1不是目录,而。,D2,D3和..是目录(按此顺序)。 这让我觉得问题出在stat调用而不是我对宏的使用,但我在这里很困惑,所以我不知道。

您正在传递stat文件的名称,但它需要一个文件路径。 如果你检查stat的返回值,你会发现它只是成功了... ,因为它们存在于任何目录中。

典型的答案:不要试图理解一个程序的行为,这个程序会破坏错误条件。 一旦它甚至是最微小的一点神秘(最迟),添加代码来检查所有函数的返回值。