TTreeView组件遍历磁盘目录
实例说明
TTreeView组件是一个以分枝结构或者说树状结构显示数据的组件,以该组件显示数据具有较好的等级关系和逻辑层次,并且易于操作。在组件中显示的数据结构与系统中目录的结构非常相似,所以本例使用该组件设计一个磁盘目录查看工具。运行本例,在窗口右边选择目录或路径就可以在TTreeView组件中列出所有选择目录中的子目录和文件。实例运行效果如图1所示。
图1 TTreeView组件遍历磁盘目录
思路与技术
磁盘中的目录结构就像TTreeView组件中显示的一样,具有较为明显的层次结构,首先将一个目录中的所有子目录及文件名添加到TTreeView组件中,然后再进入该目录中的子目录进行同上一步一样的操作,持续进行多次直到进入最后一层停止,接着回到上一层对下一个目录进行同样的操作。这个过程可以用递归的方法完成。使用FindFirst函数可以列出目录中所有的文件及子目录,该函数原型如下:
function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;
参数说明:
l Path:查找的文件,如果设置为*.*表示所有的文件及目录。
l Attr: 文件属性。
l F:搜索信息。
注意:TTreeView组件的等级关系。
开发步骤
(1)新建一个标准工程,创建一个新窗体,默认主窗体的Name属性为Form1。
(2)在主窗体中添加一个TLabel、TtreeView、TDriveComboBox、TdirectoryListBox 、TSaveDialog和TButton组件。
(3)设置TDirectoryListBox组件的Name属性为DLB1,设置TDriveComboBox组件的Dirlist属性为DLB1。
(4)程序完整代码如下:
感觉有问题
//遍历目录下的所有文件
var
Directotynote
,
FileNode
:
TTreeNode
;
procedure
TForm1
.
myfind
(
bNode
:
TTreeNode
;
TreeView1
:
TTreeView
);
var
sr
:
TsearchRec
;
Err
:
Integer
;
begin
try
Err
:=
FindFirst
(
'*.*'
,
$37
,
sr
);
while
(
ERR
=
0
)
do
begin
if
sr
.
Name
[
1
]
<>
'.'
then
begin
if
(
sr
.
Attr
and
faDirectory
)
=
0
then
begin
TreeView1
.
Items
.
AddChildFirst
(
bNode
,
sr
.
Name
);
end
;
if
(
sr
.
Attr
and
fadirectory
)
=
faDirectory
then
begin
FileNode
:=
TreeView1
.
Items
.
AddChildFirst
(
bnode
,
sr
.
Name
);
chdir
(
sr
.
Name
);
Application
.
ProcessMessages
;
myFind
(
FileNode
,
TreeView1
);
// chdir('..');
end
;
end
;
err
:=
FindNext
(
sr
);
end
;
except
end
;
end
;
procedure
TForm1
.
DLB1Change
(
Sender
:
TObject
);
begin
label2
.
Caption
:=
dlb1
.
Directory
;
treeview1
.
Items
.
Clear
;
myFind
(
directotynote
,
TreeView1
);
end
;