Hola,
Está feo que lo diga yo, pero, en fin, tal vez puede serte de utilidad el componente "TDirsWin" que puedes encontrar dentro del paquete "DecComp", el cual hallarás en el
apartado de componentes del
ClubDelphi y también en mi
página Web personal. Si no quieres hacer uso de dicho componente al menos puedes ver cómo hace lo que hace, valga la redundancia.
Respecto de la segunda cuestión tal vez la siguiente función, si bien no te proporciona exactamente lo que quieres, puede darte alguna idea:
Código Delphi
[-]
function NumeroSubDirectorios(directorio: string;
ocultos, sistema, soloLectura: boolean) : integer;
var
SR: TSearchRec;
atributos: Cardinal;
begin
Result := 0;
atributos := faDirectory;
if ocultos then atributos := atributos or faHidden;
if sistema then atributos := atributos or faSysFile;
if soloLectura then atributos := atributos or faReadOnly;
directorio := IncludeTrailingPathDelimiter(directorio);
if FindFirst(directorio +'*', atributos, SR) = 0 then
begin
repeat
if (SR.Name <> '.') and (SR.Name <> '..')
and DirectoryExists(directorio + SR.Name) then
Inc(Result);
until FindNext(SR) <> 0;
SysUtils.FindClose(SR);
end;
end;