标题:[求助]目录树的建立与修改的问题
只看楼主
九月霜
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2006-4-26
 问题点数:0 回复次数:2 
[求助]目录树的建立与修改的问题
我在程序里有一个目录树,我使用了数据库来标记每个节点,但使用比较繁琐笨拙,有什么好的办法实现目录树的建立与增删呢?请高手赐教.最好来个例子.一段代码也行,谢谢!!!
搜索更多相关主题的帖子: 目录树 数据库 节点 例子 
2006-06-24 11:41
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
得分:0 
以前好像作过,不需要数据库。需要一个helper funtion。查出当前目录下的所有子目录。这样从跟节点递归就可以建立这个tree了。在google上查一下一个叫CSADirRead的class,如果你没有现成的helper function。

http://myajax95./
2006-06-24 14:00
赵博闻
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2007-9-20
得分:0 
不要用数据库,建议使用映射表CMap
typedef struct ST_TREE_NODE_t{
    HTREEITEM    hItem;            // 结点句柄            
    INT        nType;            // 结点类型                    
    INT        nErrHvrNum;        // 状态异常数            
    INT        nConnectHvrNum;    // 状态连结数            
    HTREEITEM    hParentHItem;        // 父结点句柄            
    ULONG        Id;            // 结点编号            
}ST_TREE_NODE;
把你要记录的信息先定义到Map中
每次进行增删改查时都要更新该表,否则必出错。
映射表的具体操作可查MSDN。现将常用的说明如下:
能用到的大概为两种CMapPtrToPtr,对想到对象。即通过节点找信息Item——〉pNode
CMapWordToPtr。数值找信息。如:Id-->Item。使用的表越多可查找的信息量越大,查找越灵活,维护越困难。这里的实质就是用映射表代替数据库操作。
向Map加入信息:
    CMapPtrToPtr m_mapNode;

 ST_TREE_NODE *pNode = NULL;

    pNode = new ST_TREE_NODE;
    if( pNode == NULL )
    {
       错误处理
    }
   
    // 因为是动态分配内存所以要先清空该内存一面加代物用数据
    memset( pNode, 0, sizeof(ST_TREE_NODE) );
    // 为各项付值
    pNode->hItem = hCate;                   //
    pNode->nType = nType;                   //     
    pNode->hParentHItem = nType == D_PC_NODE_CATE_1 ? m_hRoot : hParentCate;   //

    pNode->Id = dwCateId;                   //
    // 储存
    m_mapNode.SetAt( hCate, pNode );
删除节点信息
m_mapNode。RemoveKey(hCate);
// 释放掉原来开辟的内存。否则内存会泄露,在析构函数中也要写
 if ( pNode != NULL)
    {
        delete pNode;

        pNode = NULL;
    }
 用动态分配内存一定要注意释放和泄漏问题
所谓怎删改查就是增加和消除,以及其复用。具体说
增加节点:InsertItem。
消除节点:DeletItem
修改节点:先DeletItem再InsertItem
查找节点:感觉有点无聊可看具体来定
(对于这种方法我已经实现并测试过,可代码太庞杂了,我是写了个CTreeCtrl的派生类里面包含了许多功能,你未必能用到。如果有不明白的地方请继续提问,大家一起讨论阿)

2008-04-28 10:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-74507-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.287996 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved