在目录树中搜索文件

searching for a file within directory tree

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

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

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() 允许使用 "wildcards" like * 到 select 文件名。 alphasort() 按字母顺序对名称进行排序,并且是 POSIX 系统的一部分。 FNDME 是一个全局字符串,因为回调函数 filter 不接受任何指向直接结构的指针。