如何使用C语言在目录中找到所有具有相同扩展名的文件? 我的意思是我只想作为一个参数输入扩展名然后我想列出所有带有我输入的扩展名的文件
int main (int argc,char *argv[])
{
DIR *dir;
struct dirent *dent;
if (argc != 3) {
printf("usage: ./Exe_Name dir_name file_name");
}
dir = opendir(argv[1]);
//this part
if(dir!=NULL) {
while((dent=readdir(dir))!=NULL)
if(strcmp(dent->d_name,argv[2])==0)
printf("%s\n",dent->d_name);
} else
printf ("Cannot open directory '%s'\n", argv[1]);
closedir(dir);
return 0;
}
答案 0 :(得分:5)
您想使用scandir
。来自man page:
int scandir(const char *dir, struct dirent ***namelist, int(*filter)(const struct dirent *), int(*compar)(const struct dirent **, const struct dirent **)); int alphasort(const void *a, const void *b); int versionsort(const void *a, const void *b);
scandir()函数扫描目录dir,调用filter() 在每个目录条目上。 filter()返回的条目 非零存储在通过malloc()分配的字符串中,使用排序 qsort()与比较函数compar(),并收集 通过malloc()分配的数组名称列表。如果filter为NULL, 所有条目都被选中。
alphasort()和versionsort()函数可以用作 比较函数compar()。前者对目录条目进行排序 使用strcoll(3),后者在字符串上使用strverscmp(3) (* a) - > d_name和(* b) - > d_name。
答案 1 :(得分:1)
旧学校的方法是使用glob
,如man -S 3 glob
#include <glob.h>
int glob(const char *pattern, int flags,
int (*errfunc) (const char *epath, int eerrno),
glob_t *pglob);
void globfree(glob_t *pglob);