0

我正在使用 Linux 系统。

 DIR *dir;
  struct dirent *ent;
  while ((ent = readdir (dir)) != NULL) {           
    printf ("%s\n", ent->d_name);
  }

我得到".",".."结果是一些文件名。我怎样才能摆脱"."".."?我需要这些文件名以进行进一步处理。是什么类型的ent->d_name??它是字符串还是字符?

4

2 回答 2

2

阅读 readdir 的手册页,得到这个:

struct dirent {
               ino_t          d_ino;       /* inode number */
               off_t          d_off;       /* offset to the next dirent */
               unsigned short d_reclen;    /* length of this record */
               unsigned char  d_type;      /* type of file; not supported
                                              by all file system types */
               char           d_name[256]; /* filename */
           };

ent->d_namechar 数组也是如此。当然,您可以将其用作字符串。

摆脱"."and ".."

while ((ent = readdir (dir)) != NULL) {  
if (strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0 )
    printf ("%s\n", ent->d_name);
  }

更新

结果ent包含文件名和文件夹名。如果不需要文件夹名称,最好ent->d_type使用 . 检查字段if(ent->d_type == DT_DIR)

于 2013-08-25T12:14:10.740 回答
1

使用strcmp

while ((ent = readdir (dir)) != NULL) {  
if (strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0)         
    //printf ("%s\n", ent->d_name);
  }
于 2013-08-25T12:05:36.023 回答