unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Panel1: TPanel;
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{函数的默认参数是指定显示在第几个元素下面}
function DirToTree(Tree: TTreeView; Path: string; num: Integer = - 1 ): Boolean;
var
sr: TSearchRec;
node: TTreeNode;
begin
path := ExcludeTrailingPathDelimiter(path); {去掉最后一个 '\'}
if not DirectoryExists(path) then Exit; {路径不存在则退出}
if num = - 1 then node := nil else node := Tree.Items[num]; {确认节点}
if FindFirst(Path + '\*.*' , faAnyFile, sr) = 0 then
begin
repeat
if sr.Name[ 1 ] = '.' then Continue; {如果是'.' 或 '..' (当前目录或上层目录)则忽略}
Tree.Items.AddChild(node, sr.Name); {都是通过这句添加的}
Application.ProcessMessages; {加上可以让程序兼顾其他消息}
{如果是文件夹则执行递归}
if (sr.Attr and faDirectory) = faDirectory then
DirToTree(Tree, Path + '\' + sr.Name, Tree.Items.Count- 1 );
until (FindNext(sr) <> 0 );
end;
Result := True;
end;
{测试}
procedure TForm1.Button unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Panel1: TPanel;
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{函数的默认参数是指定显示在第几个元素下面}
function DirToTree(Tree: TTreeView; Path: string; num: Integer = - 1 ): Boolean;
var
sr: TSearchRec;
node: TTreeNode;
begin
path := ExcludeTrailingPathDelimiter(path); {去掉最后一个 '\'}
if not DirectoryExists(path) then Exit; {路径不存在则退出}
if num = - 1 then node := nil else node := Tree.Items[num]; {确认节点}
if FindFirst(Path + '\*.*' , faAnyFile, sr) = 0 then
begin
repeat
if sr.Name[ 1 ] = '.' then Continue; {如果是'.' 或 '..' (当前目录或上层目录)则忽略}
Tree.Items.AddChild(node, sr.Name); {都是通过这句添加的}
Application.ProcessMessages; {加上可以让程序兼顾其他消息}
{如果是文件夹则执行递归}
if (sr.Attr and faDirectory) = faDirectory then
DirToTree(Tree, Path + '\' + sr.Name, Tree.Items.Count- 1 );
until (FindNext(sr) <> 0 );
end;
Result := True;
end;
{测试}
procedure TForm1.Button1Click(Sender: TObject);
begin
TreeView1.Items.Clear;
DirToTree(TreeView1, Edit1.Text);
end;
end.
1Click(Sender: TObject);
begin
TreeView1.Items.Clear;
DirToTree(TreeView1, Edit1.Text);
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Panel1: TPanel;
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{函数的默认参数是指定显示在第几个元素下面}
function DirToTree(Tree: TTreeView; Path: string; num: Integer = - 1 ): Boolean;
var
sr: TSearchRec;
node: TTreeNode;
begin
path := ExcludeTrailingPathDelimiter(path); {去掉最后一个 '\'}
if not DirectoryExists(path) then Exit; {路径不存在则退出}
if num = - 1 then node := nil else node := Tree.Items[num]; {确认节点}
if FindFirst(Path + '\*.*' , faAnyFile, sr) = 0 then
begin
repeat
if sr.Name[ 1 ] = '.' then Continue; {如果是'.' 或 '..' (当前目录或上层目录)则忽略}
Tree.Items.AddChild(node, sr.Name); {都是通过这句添加的}
Application.ProcessMessages; {加上可以让程序兼顾其他消息}
{如果是文件夹则执行递归}
if (sr.Attr and faDirectory) = faDirectory then
DirToTree(Tree, Path + '\' + sr.Name, Tree.Items.Count- 1 );
until (FindNext(sr) <> 0 );
end;
Result := True;
end;
{测试}
procedure TForm1.Button unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Panel1: TPanel;
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{函数的默认参数是指定显示在第几个元素下面}
function DirToTree(Tree: TTreeView; Path: string; num: Integer = - 1 ): Boolean;
var
sr: TSearchRec;
node: TTreeNode;
begin
path := ExcludeTrailingPathDelimiter(path); {去掉最后一个 '\'}
if not DirectoryExists(path) then Exit; {路径不存在则退出}
if num = - 1 then node := nil else node := Tree.Items[num]; {确认节点}
if FindFirst(Path + '\*.*' , faAnyFile, sr) = 0 then
begin
repeat
if sr.Name[ 1 ] = '.' then Continue; {如果是'.' 或 '..' (当前目录或上层目录)则忽略}
Tree.Items.AddChild(node, sr.Name); {都是通过这句添加的}
Application.ProcessMessages; {加上可以让程序兼顾其他消息}
{如果是文件夹则执行递归}
if (sr.Attr and faDirectory) = faDirectory then
DirToTree(Tree, Path + '\' + sr.Name, Tree.Items.Count- 1 );
until (FindNext(sr) <> 0 );
end;
Result := True;
end;
{测试}
procedure TForm1.Button1Click(Sender: TObject);
begin
TreeView1.Items.Clear;
DirToTree(TreeView1, Edit1.Text);
end;
end.
1Click(Sender: TObject);
begin
TreeView1.Items.Clear;
DirToTree(TreeView1, Edit1.Text);
end;
end.
转载于:https://blog.51cto.com/zsqztg/153434