2017-05-24 60 views
0

文件夹我想检查的时候我去了在目录中的所有文件,如果其中一个文件/目录上的项目是文件夹(另一个目录)检查的目录项在C

代码我有从(使用dirent.h)开始:

DIR *dir; 
struct dirent *ent; 
if ((dir = opendir ("c:\\src\\")) != NULL) { 
    /* print all the files and directories within directory */ 
    while ((ent = readdir (dir)) != NULL) { 
    if (ent.is_folder()) // here is what I want to implement 
     printf ("Folder: %s\n", ent->d_name); 
    else 
     printf("File %s\n", ent->d_name); 
    } 
    closedir (dir); 
} else { 
    /* could not open directory */ 
    perror (""); 
    return EXIT_FAILURE; 
} 
+0

什么,你有什么问题? –

+0

没有函数ent.is_folder()你知道..它是c。如果您看到我想检查ent(从dir读取的)是目录(文件夹)还是文件 –

+0

请查看https://stackoverflow.com/questions/4553012/checking-if-a-file -is-a-directory-or-just-a-file –

回答

1

READDIR()返回的结构,在其中有一个变量来检查,如果目录中包含的文件和/或目录。这里是结构:

struct dirent { 
    ino_t   d_ino;  /* numéro d'inœud */ 
    off_t   d_off;  /* décalage jusqu'à la dirent suivante 
*/ 
    unsigned short d_reclen; /* longueur de cet enregistrement */ 
    unsigned char d_type;  /* type du fichier */ 
    char   d_name[256]; /* nom du fichier */ 
}; 

所以你会在你的代码中使用:ent-> d_type来访问这个变量。 然后用标志DT_DIR检查它是否是一个目录,如果它是一个DT_REG标志的文件。下面

代码工作:

DIR *dir; 
struct dirent *ent; 

if ((dir = opendir ("c:\\src\\")) != NULL) 
{ 
    /* print all the files and directories within directory */ 
    while ((ent = readdir (dir)) != NULL) { 
     if (ent->d_type == DT_DIR)// here is what I want to implement 
      printf ("Folder: %s\n", ent->d_name); 
     else if (ent->d_type == DT_REG) 
      printf("File %s\n", ent->d_name); 
    } 
    closedir (dir); 
} 
else 
{ 
/* could not open directory */ 
    perror (""); 
     return EXIT_FAILURE; 
}