unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    ListView1: TListView;
    procedure FormCreate(Sender: TObject);
    procedure TreeView1Click(Sender: TObject);
  private
    procedure GetHD;
    procedure CreateDirTree(RootNode: TTreeNode);
    procedure CreateFileTree(FileNode: TTreeNode);
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  MainNode: TTreeNode;
  NodeCaption: string;
  SelectNode: TTreeNode;implementation{$R *.dfm}procedure TForm1.GetHD;
var
  Size: DWORD;
  I: Integer;
  Buffer: array[0..255] of char;
  S: string;
begin
  S := '';
  MainNode := TreeView1.Items.Add(nil, '我的电脑');      //我的电脑节点
  Size := GetLogicalDriveStrings(255, Buffer);           //获取分区字符串的长度
  for I := 0 to Size - 1 do
  begin
    if Buffer[I] = #0 then                               //0#是空串
    begin
      CreateDirTree(TreeView1.Items.AddChildObject(MainNode, S, PChar(S)));        //我的盘符节点
      S := '';
    end else
      S := S + Buffer[I];
  end;
end;procedure TForm1.CreateDirTree(RootNode: TTreeNode);
var
  SearchRec: TSearchRec;
  Path: string;
  Found: Integer;
begin
  Path := PChar(RootNode.Data) + '\*.*';
  Found := FindFirst(Path, faAnyFile, SearchRec);                   //查找目录,成功返回0
  while Found = 0 do                                                //有目录,则运行以下代码
  begin
    if (SearchRec.Attr = faDirectory) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
      CreateDirTree(TreeView1.Items.AddChildObject(RootNode, SearchRec.Name, PChar(PChar(RootNode.Data) + '\' + SearchRec.Name)));
    Found := FindNext(SearchRec);
  end;
  FindClose(SearchRec);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  GetHD;
end;procedure TForm1.TreeView1Click(Sender: TObject);
begin
  SelectNode := TreeView1.Selected;
  CreateFileTree(SelectNode);
end;procedure TForm1.CreateFileTree(FileNode: TTreeNode);
var
  SearchRec: TSearchRec;
beginend;end.

解决方案 »

  1.   

    只要传入文件目录就可以了...
    procedure ReadFileName(var MyFileList : TStringList; const AnyFile:String);
    var
      Found:integer;
      SearchResult:TSearchRec;
    begin
      if FileGetAttr(AnyFile)<>faDirectory then begin
        MyFileList.Add(AnyFile);
        Exit;
      end;
      Found:=FindFirst(AnyFile+'\*.*',faAnyFile,SearchResult);
      while Found=0 do begin
        if (SearchResult.Name<>'.')and(SearchResult.Name<>'..') then ReadFileName(MyFileList,AnyFile+'\'+SearchResult.Name);
        Found:=FindNext(SearchResult);
      end;
      if (SearchResult.Name<>'.')and(SearchResult.Name<>'..') then FindClose(SearchResult);
    end;