现要把某一目录下所有的文件和目录全部转化为TREE,并对目录名,文件名进行加密,如何把新的TREE保存到表中。
表结构如下
ID PARENDID NAME   INFO           DIRECTORY
   父结点   原名称 加密后名称      是否为目录

解决方案 »

  1.   

    其实跟从表中建树是一样的,只是你这里是倒过来了,写个递归,
    每找到一个文件,就向向表中插入一条记录,
    ID:自增;
    父结点:上层文件夹ID;
    原文件名:文件名;
    ...
    不会很难啊;
      

  2.   

    procedure TNewReportForm.DirToTreeView(Tree: TTreeView; Directory: string; Root: TTreeNode; IncludeFiles:
        Boolean);
    var
      SearchRec: TSearchRec;
      tempItem, ItemTemp: TTreeNode;
    begin
      with Tree.Items do
        try
          BeginUpdate;
          if Directory[Length(Directory)] <> '\' then
            Directory := Directory + '\';
          if FindFirst(Directory + '*.*', faDirectory, SearchRec) = 0 then
          begin
            repeat
            if (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name[1] <> '.') then
            begin
              if (SearchRec.Attr and faDirectory > 0) then
              begin
                Root := AddChild(Root, SearchRec.Name);
                Root.ImageIndex := 0;
                Root.SelectedIndex := 2;
              end;
              ItemTemp := Root.Parent;
              DirToTreeView(Tree, Directory + SearchRec.Name, Root, IncludeFiles);
              Root := ItemTemp;
            end
            else if IncludeFiles then
              if SearchRec.Name[1] <> '.' then
              begin
                tempItem := AddChild(Root, SearchRec.Name);
                tempItem.ImageIndex := 1;
                tempItem.SelectedIndex := 1;
              end;
            until FindNext(SearchRec) <> 0;
            FindClose(SearchRec);
          end;
        finally
          EndUpdate;
        end;
      Tree.TopItem.Expanded := True;
    end;function GetNodePath(ANode: TTreeNode): String;
    var
      tempStr: String;
    begin
      if ANode.Parent <> nil then
        tempStr := tempStr + GetNodePath(ANode.Parent);
      Result := tempStr + '\' + ANode.Text;
    end;DirToTreeView(newReportForm.TreeView1, ApplicationPath + 'stencil', newReportForm.TreeView1.TopItem, True);
    省下的自己处理吧
      

  3.   

    CDSoftwareWj(95927)你写的这段我已写好,
    其关键是要把原来的目录名和现在的目录名对应的存到表中
      

  4.   

    其中也就是在建新TREE时给CAPTION加一个附加值。
    等到要用时可以读出这个附加值和CAPTION
      

  5.   

    那你可以用 TTreeNode 中的 Data 域呀 hehe^^
      

  6.   

    先定义,当然你可以根据你的需要来定type
      PUserRecord = ^TUserRecord;
      TUserRecord = Record
        UserName: String;
        UserID: String;
        UserBM: String;
      end;写procedure TMainForm.CreateUserList;
    var
      i: Integer;
      tempStr: String;
      vTempNode: TTreeNode;
      UserData: PUserRecord;  // 这就是写入的结构指针
    begin
      TreeView.Items.Clear;
      vTempNode := TreeView.Items.Add(nil, '人员列表');
      vTempNode.ImageIndex := 0;
      vTempNode.SelectedIndex := 0;  for i := 0 to UserListXML.NodeCount - 1 do
      begin
        New(UserData);  // 在付值前一定要用New进行初始化 ^^!
        tempStr := UserListXML.Get_Value(i);
        UserData.UserName := ListValue(tempStr, 0, ' ');  // 给结构付值
        UserData.UserID := ListValue(tempStr, 1, ' ');
        UserData.UserBM := ListValue(tempStr, 2, ' '); //部门(由‘/’分割,由后向前生成)    vTempNode := CreateBranch(vTempNode, UserData.UserBM, TreeView);
        vTempNode := TreeView.Items.AddChildObject(vTempNode, ListValue(tempStr, 0, ' '), UserData);  // 这里是关键一句,你可以看看相关帮助
        vTempNode.ImageIndex := 2;
        vTempNode.SelectedIndex := 2;    while vTempNode.Parent <> nil do
        begin
          if vTempNode.Parent.ImageIndex <> 3 then
            vTempNode.Parent.ImageIndex := 3;
          if vTempNode.Parent.SelectedIndex <> 3 then
            vTempNode.Parent.SelectedIndex := 3;
          vTempNode := vTempNode.Parent;
        end;
      end;
      TreeView.TopItem.Expanded := True;
    end;
    读时 PUserRecord(TreeView.Items[j].Data).UserName = ListValue(UserList, i , '+}|')用这样的形式还取值会了吧省下的可以自己做了吧 ^^!分给我 hehe^^
      

  7.   

    type
      TCusInfo=Class
        custNO:string;
        custName:String;
    end;
    procedure TForm1.Button4Click(Sender: TObject);
    type aa=array of string;
    var
      CusInfo:TCusInfo;
      TempNode:TTReeNode;
    begin
      CusInfo:=TCusInfo.Create;
      CusInfo.custNO:='1s';
      CusInfo.CustName:='a';
      //赋值
      TempNode:=TreeView2.items.AddChild(Nil,CusInfo.CustName);
      TempNode.Data:=CusInfo;end;
    为何读不出相应的DATA中的内容?
      

  8.   

    PUserRecord(TreeView.Items[j].Data).UserName
      

  9.   

    PUserRecord(TreeView.Items[j].Data).UserName
      

  10.   

    type
      TCusInfo=Class
        custNO:string;
        custName:String;
    end;
    procedure TForm1.Button4Click(Sender: TObject);
    type aa=array of string;
    var
      CusInfo:TCusInfo;
      TempNode:TTReeNode;
    begin
      CusInfo:=TCusInfo.Create;
      CusInfo.custNO:='1s';
      CusInfo.CustName:='a';
      //赋值
      TempNode:=TreeView2.items.AddChild(Nil,CusInfo.CustName);
      TempNode.Data:=CusInfo;   CusInfo.custNO:='34';
      CusInfo.CustName:='b';
      //赋值
      TempNode:=TreeView2.items.AddChild(Nil,CusInfo.CustName);
      TempNode.Data:=CusInfo;
    end;为什么用TCusInfo(TreeView2.selected.Data).custNO;读出的是最后一条?
    而读不出第一条?
      

  11.   

    type
      PMyTree=^TMyTree;
       TMyTree =Record
        custNO:string;
        custName:String;
    end;procedure TForm1.Button4Click(Sender: TObject);
    type aa=array of string;
    var
      p : PMyTree;
      TempNode:TTReeNode;
    begin
       New(p);
      p^.custNO:='1s';
      p^.CustName:='a';
      TempNode:=TreeView2.items.AddChild(Nil,p.CustName);
      TempNode.Data:=p;
      New(p);
      p^.custNO:='2s';
      p^.CustName:='b';
      TempNode:=TreeView2.items.AddChild(Nil,p.CustName);
      TempNode.Data:=p;
      New(p);
      p^.custNO:='3s';
      p^.CustName:='c';
      TempNode:=TreeView2.items.AddChild(Nil,p.CustName);
      TempNode.Data:=p;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      q:PMyTree;
      node : ttreenode;
    begin
     node :=treeview2.Selected;
    Q := PMyTree(node.Data );
    edit1.Text:=Q^.custno;
    end;