我想将TreeView中的被选中的树节点(包括该节点的子节点)输出为硬盘中的目录结构,该如何做?(50分)

  • 主题发起人 主题发起人 fullstrong
  • 开始时间 开始时间
F

fullstrong

Unregistered / Unconfirmed
GUEST, unregistred user!
我想将TreeView中的被选中的树节点(包括该节点的子节点)输出为硬盘中的目录结构,
(就是在硬盘中根据被选中树的结构,以树节点的名称建立相应目录和子目录),
该如何做?
 
弄一个循环去创建目录不行吗
 
这是一个深度优先递归算法:
procedure MakeTreeDir(ANode:TTreeNode; ParentDir:string);
var
Child:TTreeNode;
begin
ParentDir:=ParentDir+'/'+ANode.Text;
MkDir(ParentDir);
Child:=ANode.getFirstChild ;
while Child<>nil do
begin
MakeTreeDir(Child, ParentDir);
Child:=ANode.GetNextChild(Child);
end;
end;
 
深度优先
 
哈哈,这个问题我来答,昨天我刚编了一个同样的程序,现在给你代码,他还是采用了递归方法
千万不要忘了给我分数呀!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls, ImgList;

type
TForm1 = class(TForm)
Button1: TButton;
TreeView1: TTreeView;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure GetDirectories(Tree: TTreeView; Directory: string; Item: TTreeNode; IncludeFiles: boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation

{$R *.DFM}
procedure TForm1.GetDirectories(Tree: TTreeView; Directory: string; Item: TTreeNode; IncludeFiles: boolean);
var
SearchRec: TSearchRec;
ItemTemp: TTreeNode;
begin
TreeView1.Items.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
Item := Tree.Items.AddChild(Item,SearchRec.Name);
ItemTemp := Item.Parent;
GetDirectories(Tree,Directory + SearchRec.Name,Item,IncludeFiles);
Item := ItemTemp;
end;
end
else if IncludeFiles then
if SearchRec.Name[1] <> '.' then
begin
Tree.Items.AddChild(Item,SearchRec.Name);
end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
TreeView1.Items.EndUpdate;
end;



procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
GetDirectories(TreeView1,edit1.Text,nil,True);
end;

end.
上面的程序中edit1中只要输入查找的路径就行了;比如输入"d:/"便可查你要求的硬盘目录
输入其他子树也可以
 
to chen__ye:
为什麽我提问题之前没有看到你的答案呢? :< ~~~~ 害得我损失了50大元!!!!
不过还是很感谢你的程序,解决了我的问题. 如果你看到了此贴,那么到我的问题处去领分吧!
问题的题目是: 如何遍历filelistbox得到其中内容?(诚心求助,急!)
呵呵~~~赶快呦!
 
接受答案了.
 

Similar threads

D
回复
0
查看
867
DelphiTeacher的专栏
D
D
回复
0
查看
836
DelphiTeacher的专栏
D
D
回复
0
查看
785
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部