Lenadro:
Mira checa estos enlaces:
http://forums.fivetechsupport.com/viewtopic.php?f=6&t=26898
http://forums.fivetechsupport.com/viewtopic.php?f=6&t=26932
La forma más facil de armar un árbol de directorios es usando XBrowse, no te complicas la vida.
Te dejo unas funciones que arme y que te dan uno a uno toda la estructura del disco, ya sean archivos o carpetas con atributos de solo lectura, de sistema y ocultos..
DirectoryRecurse("C:\*","DHS") //-> funcion propia de (x)Harbour y Harbour
ArbolDir("C:") //---> Mi función, aqui la comparto..
#INCLUDE "fivewin.CH"
#INCLUDE "DIRECTRY.CH"
STATIC aTree:= {}
#IfNDef __XHARBOUR__
FUNCTION DbSkipper( n ) ; RETURN __DbSkipper( n )
FUNCTION DBPACK() ; RETURN __DbPack()
FUNCTION DBZAP() ; RETURN hb_DBZap()
FUNCTION CurDrive( x ) ; RETURN hb_CurDrive( x )
#EndIf
FUNCTION ArbolDir(cDir)
LOCAL cletra:= UPPER(cDir)
LOCAL aDirs:= DirTree(cletra)
LOCAL N
IF LEN(aDirs) > 0
FOR N:= 1 TO LEN(aDirs)
MSGStop("Direcorio: " + aDirs[N,1] +CRLF+;
"Origen: " + aDirs[N,2] +CRLF+;
"Tamaño: " + aDirs[N,3] +CRLF+;
"Creado: " + aDirs[N,4] +CRLF+;
"Hora: " + aDirs[N,5] +CRLF+;
"Atributos: " + aDirs[N,6]+"","TREEDIR")
NEXT
MSGInfo(ALLTRIM(STR(LEN(aDirs)))+" Carpetas Encontrados", "DIRTREE")
ELSE
MSGStop("Disco "+cletra+" no Válido o Vacio", "DIRTREE")
ENDIF
RETURN Nil
//------------------------------------------------------------------------------------------------------------------//
FUNCTION DirTree(cDir)
LOCAL aSubDirs,nLen,i
aSubDirs:= GetTreeSubDirs(DIRECTORY(cDir+"\*.*","DHS"),cDir)
nLen:= LEN(aSubDirs)
IF nLen > 0
FOR I:= 1 TO nLen
AADD(aTree,{aSubDirs[I,1],aSubDirs[I,2],aSubDirs[I,3],aSubDirs[I,4],aSubDirs[I,5],aSubDirs[I,6]})
CURDRIVE(LEFT(aSubDirs[I,1],1))
CURDIR(aSubDirs[I,1])
DirTree(aSubDirs[I,1])
NEXT
ENDIF
RETURN aTree
//------------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION GetTreeSubDirs(aDirs,cDir)
LOCAL N
LOCAL nLen:= LEN(aDirs)
LOCAL aDirVal:= {}
IF nLen > 0
FOR N:= 1 TO nLen
IF LEFT(aDirs[N][1],1) <> "."
IF aDirs[N][5] == 'D' .OR. aDirs[N][5] == 'RD' .OR. aDirs[N][5] == 'RHD' .OR. aDirs[N][5] == 'RHSD' .OR. aDirs[N][5] == 'HSD' .OR. aDirs[N][5] == 'SD' .OR. aDirs[N][5] == 'HD' .OR. aDirs[N][5] == 'RSD' .OR. aDirs[N][5] == 'RHDA' .OR. aDirs[N][5] == 'SDA' .OR. aDirs[N][5] == 'HSDA' .OR. aDirs[N][5] == 'RHSDA'
AADD(aDirVal,{cDir + "\" + aDirs[N,F_NAME], cFilePath(cDir + "\" + aDirs[N,F_NAME]), Espacio(cDir + "\" + aDirs[N,F_NAME]), aDirs[N,F_DATE], aDirs[N,F_TIME], aDirs[N,F_ATTR]})
ENDIF
ENDIF
NEXT
ENDIF
RETURN aDirVal
//------------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION Espacio(cDir)
LOCAL cSize, N
LOCAL nSize:= 0
LOCAL ADirs:= DIRECTORY(cDir+"\*.*",'DHS')
LOCAL nFound:= LEN(ADirs)
IF nFound > 0
FOR N:= 1 TO nFound
nSize:= nSize + ADirs[N,F_SIZE]
NEXT
cSize:= Format(nSize,.T.)
ELSE
cSize:= "Vacio"
ENDIF
RETURN cSize
//------------------------------------------------------------------------------------------------------------------//
FUNCTION Format(nValue,lShortFormat)
LOCAL cTmp := " Bytes"
LOCAL nBT, nKB, nMB, nGB, nTB, nPB
nBT := 1024
nKB := nBT * nBT
nMB := nKB * nBT
nGB := nMB * nBT
nTB := nGB * nBT
nPB := nTB * nBT
IF lShortFormat
DO CASE
CASE nValue < nBT
cTmp := " Bytes"
CASE nValue > nBT .AND. nValue < nKB
cTmp := " KB"
nValue := nValue / nBT
CASE nValue > nKB .AND. nValue < nMB
cTmp := " MB"
nValue := nValue / nKB
CASE nValue > nMB .AND. nValue < nGB
cTmp := " GB"
nValue := nValue / nMB
CASE nValue > nGB .AND. nValue < nTB
cTmp := " TB"
nValue := nValue / nGB
CASE nValue > nTB .AND. nValue < nPB
cTmp := " PB"
nValue := nValue / nTB
OTHERWISE
cTmp := " N/D"
nValue := nValue / ( nPB * nPB )
ENDCASE
ENDIF
RETURN ALLTRIM(TRANSFORM(nValue,"999,999,999,999.99")) + cTmp
en la caprte samples tambien hay ejemplos, checa xbrwdisk.prg, treeview.prg, treelst.prg.tambien puedes armar la estructura del disco con lasclases Treeview y ListView, pero no me convencieron para lo que necesitaba.
Comentanos más sobre lo que necesitas, espero haber ayudarte un poco...
Saludos