• 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;

     

     

     





    附件列表

    • 相关阅读:
      LA 3026 Period
      Touch
      Uva 11762 Race to 1
      清北学堂模拟赛d1t2 火柴棒 (stick)
      清北学堂模拟赛d1t1 位运算1(bit)
      常州模拟赛d8t2 绘画
      常州模拟赛d8t1 友好数对
      常州模拟赛d5t3 appoint
      常州模拟赛d7t1 亲戚
      常州模拟赛d7t3 水管
    • 原文地址:https://www.cnblogs.com/xe2011/p/3885565.html
    Copyright © 2020-2023  润新知