如何得到一个指定目录下的所有文件夹的名称(是文件夹)

解决方案 »

  1.   

    //这个只取指定目录下第一层目录名
    procedure GetChildDir(Path:string;var ResultList:TStringList);
    var SearchRec : TSearchRec;
        Attr : integer;
        Found : integer;
    begin
      ResultList:=TStringList.Create;
      Attr := faDirectory;
      Found := FindFirst(Path, Attr, SearchRec);
      while Found = 0 do //表示有子目录
        begin
          if (SearchRec.Attr=faDirectory) and (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
            ResultList.Add(SearchRec.Name);
          Found := FindNext(SearchRec);
        end;
      SysUtils.FindClose(SearchRec);
    end;
      

  2.   

    用递归procedure TForm1.Button20Click(Sender: TObject);
    begin
      displaykind(nil,'c:\');//指定的文件夹
    end;procedure TForm1.displaykind(parentnode:TTreeNode;sDirName:string);
    var
      i,hFindFile:integer;
      ss,tfile:String;
      FindFileData:WIN32_FIND_DATA;
    begin
      ChDir(sDirName);
      hFindFile:=FindFirstFile('*.*',FindFileData);
      Application.Postmessage;
      if hFindFile<>INVALID_HANDLE_VALUE then
      begin
        repeat
          tfile:=FindFileData.cFileName;
          if (tfile='.') or (tfile='..') then  Continue;
          if FindFileData.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then
          begin//是一个子文件夹
           listbox1.items.add(tfile);//显示到listbox中
           if sDirName[Length(sDirName)]<>'\' then
              displaykind(treenode,sDirName+'\'+tfile)
           else
              displaykind(treenode,sDirName+tfile);
          end;
        until FindNextFile(hFindFile,FindFileData)=false;
        //FindClose(FindFileData);
      end;
      ChDir(sDirName);
    end;
      

  3.   

    递归求子目录:
    procedure Tform1.maketree;
    var
    sr:TsearchRec;
    err:integer;
    filepath:string;
    begin
     err:=findfirst('*.*',$37,sr);
     while (err=0) do
       begin
         if sr.Name[1]<>'.' then
           begin
             if (sr.Attr and fadirectory)=0 then
             begin
             end;
             if (sr.Attr and fadirectory)=16 then
             begin
               filepath:=expandfilename(sr.name);
               memo1.lines.add(filepath);
               chdir(sr.name);
               maketree;
               chdir('..');
             end;
           end;
           err:=findnext(sr);
       end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    memo1.Lines.clear;
    chdir(edit1.Text);
    maketree;
    end;
      

  4.   

    procedure TForm8.FindFiles(Path:String);
    var
      DSearchRec:TSearchRec;
      FindResult:ShortInt;
    begin
      try
        FindResult:=FindFirst(path+'*.*',faDirectory,DSearchRec);
        while FindResult=0 do
          begin
            if ((DSearchRec.Attr and faDirectory)=faDirectory) and (DSearchRec.Name<>'.')
                and (DSearchRec.Name<>'..') then
              ListBox1.Items.Add(DSearchRec.Name);
            FindResult:=FindNext(DSearchRec);
          end;
      finally
        FindClose(DSearchRec);
      end;
    end;调用
    FindFiles(ExtractFilePath(ParamStr(0))+'Temp\');我这个最简便。