我正在尝试在目录及其子目录中打印所有文件和文件夹的名称。 问题是文件也被认为是目录?很抱歉发布我的整个代码,但我真的不知道为什么会发生这种情况。谢谢。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <dirent.h>
#include <string.h>
void parcurgere(char path[1000]){
char aux[1000];
strcpy(aux, path);
struct dirent *ent;
DIR *d = opendir(path);
while((ent = readdir(d))){
struct stat my_stat;
stat(path, &my_stat);
if(S_ISDIR(my_stat.st_mode) && strcmp(ent->d_name, ".")!=0 && strcmp(ent->d_name, "..")!=0 && strcmp(ent->d_name, ".DS_Store")!=0){
printf("%s - folder\n", ent->d_name);
char x[1000];
strcpy(x, path);
strcat(x, "/");
strcat(x, ent->d_name);
parcurgere(x);
}
if(S_ISREG(my_stat.st_mode)){
printf("%s - fisier\n", ent->d_name);
}
strcpy(path, aux);
//path[strlen(path) - poz] = '\0';
}
}
int main(){
char path[1000];
strcpy(path, ".");
parcurgere(path);
return 0;
}
答案 0 :(得分:4)
您在使用stat()
打开的目录上呼叫opendir()
:
DIR *d = opendir(path);
while((ent = readdir(d))){
struct stat my_stat;
stat(path, &my_stat);
所以是的,my_stat
的内容表明它是一个目录 - 因为path
是一个目录。
您还没有检查stat()
的返回代码。这可能会失败,如果您将path
更改为stat()
从readdir()
返回的条目,如果stat()
失败,您将收到错误的结果。