读书人

c语言实现dir tree解决办法

发布时间: 2012-02-04 15:43:08 作者: rapoo

c语言实现dir tree
怎样用c语言实现dos的dir tree的功能呀,是在linux下作的。
用的是linux下的函数库
dir我基本实现了用的是opendir readdir stat等函数实现的
现在就是tree不知道怎么下手,我觉得应该递归,可是怎么写呢??另外,tree的那个竖线怎么实现的啊,很急,各位老大帮帮忙吧!!!!

[解决办法]
参考:搜索输入目录下所有文件【不包括子目录搜索】

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>

int main(int argc,char *argv[])
{
DIR *directory_pointer;
struct dirent *entry;
struct FileList
{
char filename[64];
struct FileList *next;
}start,*node;

char dir[80];
puts( "Please input the directory: ");
gets(dir);
if ((directory_pointer=opendir(dir))==NULL)
printf( "Error opening %s\n ",dir);
else
{
start.next=NULL;
node=&start;
while ((entry=readdir(directory_pointer))!=NULL)
{
node-> next=(struct FileList *)malloc(sizeof(struct FileList));
node=node-> next;
strcpy(node-> filename,entry-> d_name);
node-> next=NULL;
}
closedir(directory_pointer);
node=start.next;
while(node)
{
printf( "%s\n ",node-> filename);
node=node-> next;
}
}
system( "PAUSE ");
return 0;
}

这里使用的是链表,
那么原题就建立一个或者多个合适的链表存储 tree 命令需要显示的文件名/或其他信息,
然后根据格式控制显示即可。
[解决办法]
一些参考, 代码就不用写了
struct dirent中的几个成员:
d_type:4表示为目录,8表示为文件
d_reclen:16表示子目录或文件,24表示非子目录
d_name:目录或文件的名称


[解决办法]
排版用格式化输出,比如 sprintf(buff, "%-10s,%4d,%8f ")等等

读书人网 >C语言

热点推荐