2015-04-02 62 views
-2

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

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

+0

而操作系统是什么? – 2015-04-02 16:41:03

+0

os是unix。 – MoistyTacos 2015-04-02 21:50:38

回答

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再加上平时的头文件。 ​​允许使用像“*”这样的“通配符”来选择文件名。 alphasort()按字母顺序排列名称,并且是POSIX系统的一部分。 FNDME是全局字符串,因为回调函数过滤器不接受任何指向直接结构的指针。

+0

哦,好的,谢谢 – MoistyTacos 2015-04-02 23:09:36

+0

现在我该怎么做,如果我输入一个文件名出现在多个地方,它会打印出现的每个地方? – MoistyTacos 2015-04-02 23:24:22