建立文件目录树

建立文件目录树

题目

数据结构课程设计题。
指定文件夹的绝对路径,读取其中的所有文件名和子文件夹的名字。
根据以上技术,层层读取所有子文件夹及其中文件集合,建立文件目录树。(注意:不是二叉树)
统计、输出树中的文件总数。

思路

建立孩子兄弟链表表示树,将文件夹子文件名放入节点。

主要函数

利用头文件<io.h>中的结构体struct _finddata_t ,函数_findfirst()、_findnext()和_fineclose()进行子文件名的查找。

创建枚举类型enum Type{IFILE,FOLDER}分别指向文件和文件夹。

enum Type{IFILE,FOLDER};
struct Node
{
	string filename;
	Type type;
	Node *firstchild;
	Node *nextsibl;
};

建树代码

FTree::FTree(string path)
{
	Root=new Node;
	Root->filename=path;
	Root->firstchild=Root->nextsibl=NULL;
	Node* p=Root;
	InsertNode(path,p);
}
void FTree::InsertNode(string path, Node* p)
{
	long   hFile   =   0; 	  
     struct _finddata_t fileinfo;  
     string f;
	if((hFile = _findfirst(f.assign(path).append("\\*").c_str(),&fileinfo)) !=  -1)
	{	
			Node *q=new Node;				
			q->filename=fileinfo.name;
			q->firstchild=q->nextsibl=NULL;
			q->type=IFILE;
			p->firstchild=q;
			p=p->firstchild;
			if((fileinfo.attrib &  _A_SUBDIR))  
			{  
				if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0)  
				{
					p->type=FOLDER;
					InsertNode(f.assign(path).append("\\").append(fileinfo.name),p); 					
				}
			} 
			
		while(_findnext(hFile, &fileinfo)  == 0 )
		{	
			Node *t=new Node;
			t->filename=fileinfo.name;
			t->firstchild=t->nextsibl=NULL;
			t->type=IFILE;
			p->nextsibl=t;
			p=p->nextsibl;
			if((fileinfo.attrib &  _A_SUBDIR))  
			{  
				if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0)  
				{
					p->type=FOLDER;
					InsertNode(f.assign(path).append("\\").append(fileinfo.name),p); 					
				}  
			}
		}
				
	}
}

MFC进行可视化

在这里插入图片描述
程序仍有很多不足,在不了解的情况下也没有利用MFC树形控件,希望大家批评指正。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值