您的位置:首页 > 运维架构 > Linux

linux 系统获得当前文件夹下存在的所有文件 scandir函数和struct dirent **namelist结构体[转]

2017-11-09 12:46 549 查看

linux 系统获得当前文件夹下存在的所有文件 scandir函数和struct dirent **namelist结构体

1、引用头文件#include<dirent.h>

struct dirent **namelist;
int itotalfile;
itotalfile = scandir(filenameBuf,&namelist,0,alphasort);
char filenamelist[itotalfile][128];
for(int j = 0; j<itotalfile; j++)

{
sprintf(filenamelist[j],"%s",filenameBuf) ;
strcat(filenamelist[j],namelist[j]->d_name);

}

2、

scandir函数:读取特定的目录数据

表头文件:#include <dirent.h>

定义函数:

int scandir(const char *dirp, struct dirent ***namelist,

          int (*filter)(const struct dirent *),

          int (*compar)(const struct dirent **, const struct dirent **));

函数说明:

scandir()会扫描参数dir指定的目录文件,经由参数select指定的函数来挑选目录结构至参数namelist数组中,最后再调用

参数compar指定的函数来排序namelist 数组中的目录数据。每次从目录文件中读取一个目录结构后便将此结构传给参数select所指的
函数, select函数若不想要将此目录结构复制到namelist数组就返回0,若select为空指针则代表选择所有的目录结构。scandir()会
调用 qsort()来排序数据,参数compar则为qsort()的参数,若是要排列目录名称字母则可使用alphasort(). 结构dirent定义请参考

readdir()

返回值 :成功则返回复制到namelist数组中的数据结构数目,有错误发生则返回-1

错误代码:ENOMEM 核心内存不足

Example

1 /* print files in current directory in reverse order */
2 #include <dirent.h>
3 main()
4 {
5     struct dirent **namelist;
6     int n;
7     n = scandir(".", &namelist, 0, alphasort);
8     if (n < 0)
9         perror("scandir");
10     else
11     {
12         while(n--)
13         {
14             printf("%s/n", namelist
->d_name);
15             free(namelist
);
16         }
17         free(namelist);
18     }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: