linux下目录的本质:目录的内容其实是目录项(struct dirent)数组
老样子,阅读本文前先去了解学习目录操作前学学习相关API函数。链接--?Linux 目录操作API_伐檀(ノ`Д)ノ的博客-CSDN博客
所有的API都能在linux下使用 man 命令查看。
演示函数:
/*
access_dir:打印path指定的目录下的所有的普通文件的路径名
*/
void access_dir(const char *path)
{
/*step1: 打开一个目录*/
struct stat statbuf;
char newpath[1024]={0};
DIR *dirp = opendir(path);
if(dirp == NULL)
{
perror("opendir failed");
return ;
}
/*step2: 读取目录中的文件*/
while(1)
{
struct dirent *dt = readdir(dirp);//读取其中的一个目录项,数组下标加1
if(dt == NULL)//读完了
break;
sprintf(newpath,"%s/%s",path,dt->d_name);//把目录和文件名合成一个路径
int r = stat(newpath ,&statbuf);//读取文件属性
if(r == -1)
{
perror("stat failed!");
return ;
}
if(S_ISDIR(statbuf.st_mode))//如果是目录
{
if(strcmp(dt->d_name,".")==0 || strcmp(dt->d_name,"..")==0)//排除. .. 目录
{
continue;
}
access_dir(newpath);//递归访问
}
else //非目录文件,打印路径名
{
puts(newpath);
}
}
/*step3: 关闭目录*/
closedir(dirp);
}
目录操作结合文件属性读取加文件IO就可以做一些不错的小项目了。
看官可以自己设计一些有趣的东西来。
读取文件属性链接 (41条消息) Linux 获取文件属性_伐檀(ノ`Д)ノ的博客-CSDN博客
?
|