2010-11-24 61 views
0

我有一个问题,因为我需要获取目录中的文件列表。使用这种previous StackOverflow question为基础,我目前得到这个代码:需要从文件清单中删除目录C

void get_files(int maxfiles) { 
    int count = 0; 
    DIR *dir; 
    struct dirent *ent; 
    dir = opendir(DIRECTORY); 
    if (dir != NULL) { 

     /* get all the files and directories within directory */ 
     while ((ent = readdir(dir)) != NULL) { 
      if (count++ > maxfiles) break; 

      printf("%s\n", ent->d_name); 
     } 
     closedir(dir); 
    } else { 
     /* could not open directory */ 
     printf("ERROR: Could not open directory"); 
     exit(EXIT_FAILURE); 
    } 
} 

现在,它的工作原理几乎完全如何我想它,但问题是,它也是上市目录在他的文件,我只想要文件条目。我可以做一个简单的修改吗?

回答

2

POSIX定义了fstat它可用于检查文件是否是目录。它还有一个宏来简化检查。
http://linux.die.net/man/2/fstat
请注意,对于Windows,您可能必须在此处使用Windows API。

+0

不怕; `fstat`也可以在Windows上运行。 – Gabe 2010-11-24 14:26:14

0

如果struct dirent包含非标准的,但是,广泛使用的d_type成员,你可以用它来过滤掉的目录。值得选择使用它,只有在不支持的系统上回退到stat,因为使用d_type而不是stat可能会使您的目录速度提高数十倍或数百倍。