建立文件目录树
题目
数据结构课程设计题。
指定文件夹的绝对路径,读取其中的所有文件名和子文件夹的名字。
根据以上技术,层层读取所有子文件夹及其中文件集合,建立文件目录树。(注意:不是二叉树)
统计、输出树中的文件总数。
思路
建立孩子兄弟链表表示树,将文件夹子文件名放入节点。
主要函数
利用头文件<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树形控件,希望大家批评指正。