怎样得到一个文件夹下的所有子文件夹(不包括该文件夹的文件),并在Listbox中显示子文件夹名,还有,怎样在Delphi中使用压缩文件,类似如Winamp的皮肤文件,多谢!

解决方案 »

  1.   

    给你一个函数,可以得到一个文件夹下的所有子文件夹:
    function GetChildDir(const AParentDir: string): Tstringlist;
    var
      Dir: TSearchRec;
      Ret: integer;
      Path: string;
    begin
      Result:=Tstringlist.Create;
      try
        Path := ExtractFilePath(AParentDir);
        Ret := Sysutils.FindFirst(AParentDir, faAnyFile, Dir);
        if Ret <> NO_ERROR then exit;
        try
          while ret=NO_ERROR do
          begin
            if (Dir.Attr in [faDirectory]) and (Dir.Name[1] <> '.') then
            begin
              Result.Add(Dir.name);
              Result.addstrings(GetChildDir(Path + Dir.Name + '\*.*'));
            end;
            Ret := Sysutils.FindNext(Dir);
          end;
        finally
          Sysutils.FindClose(Dir);
        end;
      except
        Result.Free;
      end;
    end;
      

  2.   

    这段代码是用来搜索文件的,其中就有一段是用来判断是不是文件夹的:
    function IsDirNotation(ADirName: String): Boolean;
    begin
      Result := (ADirName = '.') or (ADirName = '..');
    end;procedure TMainForm.FindFiles(APath: String);
    var
      FSearchRec,
      DSearchRec: TSearchRec;
      FindResult: integer;
    begin
      APath := GetDirectoryName(APath);
      FindResult := FindFirst(APath+FFileName,faAnyFile+faHidden+
                              faSysFile+faReadOnly,FSearchRec);
      try
        while FindResult = 0 do
        begin
          lbFiles.Items.Add(LowerCase(APath+FSearchRec.Name));
          FindResult := FindNext(FSearchRec);
        end;
        FindResult := FindFirst(APath+'*.*', faDirectory, DSearchRec);    while FindResult = 0 do
        begin
          //下面的if语句就是用来判断是否是文件夹的
          //DSearchRec.Name就是子文件夹 
          if ((DSearchRec.Attr and faDirectory) = faDirectory) and not
             IsDirNotation(DSearchRec.Name) then
          begin  
            FindFiles(APath+DSearchRec.Name); // Recursion here
          end;      FindResult := FindNext(DSearchRec);
        end;
      finally
        FindClose(FSearchRec);
      end;
    end;