delphi TTreeView组件遍历磁盘目录

时间:2021-12-06 00:35:26

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;
 

附件列表