在目录树中搜索文件

时间:2015-04-02 16:34:01

标签: c file directory

您好我想帮助制作一个在目录中查找文件的c程序。它将目录和文件名作为参数,并使用stat来获取文件的属性。我希望输出显示找到的文件的路径以及其中包含文件名的任何其他路径。

我已经查看了dirent.h来访问该目录,但我不太清楚如何正确使用它来查找其中的文件。

1 个答案:

答案 0 :(得分:0)

char  *FINDME=NULL;

int filter (const struct dirent *p)
{
  int retval=0; 
  if (fnmatch(FINDME,p->d_name, 0)==0)
     retval=1;
  return retval;   
}
// scandir.c
// scan the current directory "."
// usage ./scandir filename
// usage ./scandir 'filename*'
int
main(int argc, char **argv)
{
    struct dirent **namelist;
    int n=0;
    FINDME=(argc>1)? argv[1] : "testfilename";
    n = scandir(".", &namelist, filter, alphasort);
    if (n < 0)
    {
        perror("scandir");
        exit(1);
    }   

    while (n--) 
    {
            printf("%s\n", namelist[n]->d_name);
            free(namelist[n]);
    }
    free(namelist);

}

您必须包含fnmatch.hdirent.h以及常用的头文件。 fnmatch()允许使用&#34;通配符&#34;喜欢*选择文件名。 alphasort()按字母顺序对名称进行排序,并且是POSIX系统的一部分。 FNDME是一个全局字符串,因为回调函数过滤器不接受指向直接结构的指针。