#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