delphi TTreeView组件遍历磁盘目录

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)在主窗体中添加一个TLabelTtreeViewTDriveComboBoxTdirectoryListBox TSaveDialogTButton组件。

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;

 

 

 





附件列表

    原文地址:https://www.cnblogs.com/xe2011/p/3885565.html