unit Unit1;interfaceuses
  SysUtils, Classes, Controls, Forms, ComCtrls, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    TreeView1: TTreeView;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure CreateDirTree(const path:string; tnParent:TTreeNode);
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementationuses
  FileCtrl;{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var
  Path:string;
begin
  if SelectDirectory('','',Path) then
  begin
    TreeView1.Items.BeginUpdate;
    TreeView1.Items.Clear;
    if Path[Length(Path)]<>'\' then
      Path:=Path+'\';
    CreateDirTree(Path,nil);
    TreeView1.Items.EndUpdate;
  end;
end;procedure TForm1.CreateDirTree(const path: string; tnParent: TTreeNode);
var
  SR:TSearchRec;
  found:integer;
  node:TTreenode;
begin
  found:=FindFirst(path+'*.*',faAnyFile,SR);
  while found=0 do
  begin
    if (SR.Attr=faDirectory) and (SR.Name<>'.') and (SR.Name<>'..') then
    begin
      node:=TreeView1.Items.AddChild(tnParent,SR.Name);
      node.Data:=Pchar(path+SR.Name);
      //TreeView1.Selected:=node;
      CreateDirTree(path+SR.Name+'\',node);
    end;
    found:=FindNext(SR);
  end;
  FindClose(SR);
end;end.

解决方案 »

  1.   

    一个简单的方法是用一个filelistbox控件,设置好路径后,读取它的属性
      

  2.   

    怎么要写那么多行,看我的递归大法:
    var SearchFile:TSearchRec;
       fls:Tstringlist;
       stmp:string;
    begin
      fls:=Tstringlist.Create;
      if findfirst(info.File_Filename ,faAnyFile,SearchFile)=0 then
      repeat
        if (SearchFile.Name='..') or (SearchFile.Name='.') then continue;
        stmp:=ExtractFilePath(info.File_Filename)+SearchFile.Name;
        fls.Clear;
        fls.LoadFromFile(stmp);
        deletefile(stmp);
        submit(fls.Text,'LocalFile');
      until FindNext(SearchFile) <> 0;
      FindClose(SearchFile);
      fls.Free;
    end;
      

  3.   

    怎么要写那么多行,看我的递归大法:
    var SearchFile:TSearchRec;
       fls:Tstringlist;
       stmp:string;
    begin
      fls:=Tstringlist.Create;
      if findfirst(info.File_Filename ,faAnyFile,SearchFile)=0 then
      repeat
        if (SearchFile.Name='..') or (SearchFile.Name='.') then continue;
        stmp:=ExtractFilePath(info.File_Filename)+SearchFile.Name;
        fls.Clear;
        fls.LoadFromFile(stmp);
        deletefile(stmp);
        submit(fls.Text,'LocalFile');
      until FindNext(SearchFile) <> 0;
      FindClose(SearchFile);
      fls.Free;
    end;
      

  4.   

    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    procedure TForm_Main.Button5Click(Sender: TObject);
    var TargetDateTime: TDateTime;
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      procedure SetDirFileTime(DirName:string);
      var DirInfo: TSearchRec;
          DosError: Integer;
      begin
        DosError := FindFirst(DirName+'\*.*', FaAnyfile, DirInfo);
        while DosError=0 do
        begin
          if ((DirInfo.Attr and FaDirectory)=faDirectory) and (DirInfo.Name<>'.') and (DirInfo.Name<>'..')
          then SetDirFileTime(DirName + '\' + DirInfo.Name);
          {$IF DEFINED(WIN32) AND DECLARED(UsingVCL)}
          if ((DirInfo.Attr and FaDirectory)<>FaDirectory) and ((DirInfo.Attr and FaVolumeID)<>FaVolumeID)
          {$ELSE}
          if ((DirInfo.Attr and FaDirectory)<>FaDirectory)
          {$IFEND}
                      Memo.Lines.Add(DirName + '\' + DirInfo.Name);
                    end;
          DosError := FindNext(DirInfo);
        end;
        SysUtils.FindClose(DirInfo);
      end;
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    begin
      TargetDateTime := Date;
      Memo.Lines.Clear;
      SetDirFileTime(TargetDir);
    end;
      

  5.   

    用FindFirst来写递归,很容易的,如同 redbirdli(火鸟)建子目录?createdir, ForceDirectories