Busco un ejemplo de Tree para directorios
Busco un ejemplo de Tree para directorios
Hola a todos!
Estoy intentando desarrollar una funcion tree para poder listar las carpetas y subcarpetas de una unidad a partir de un path.
¿alguien tiene algun ejemplo de tree?
Estoy intentando desarrollar una funcion tree para poder listar las carpetas y subcarpetas de una unidad a partir de un path.
¿alguien tiene algun ejemplo de tree?
- Antonio Linares
- Site Admin
- Posts: 42404
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 12 times
- Been thanked: 48 times
- Contact:
Antonio, cuando ejecuto el siguiente codigo, mi aplicación se cuelga.
Pero si ejecuto el mismo codigo en un modulo de prueba, funciona bien.
Pero si ejecuto el mismo codigo en un modulo de prueba, funciona bien.
Code: Select all | Expand
static function fPrueba( cPath )
local x
local aFiles := directory( cPath + '\*.*', 'D' )
local nFilCount := len( aFiles )
local cTxt := ""
for x := 1 to nFilCount
if aFiles[ X, F_NAME ] <> '..'
cMemo += cPath + aFiles[ X, F_NAME ] + CRLF
endif
if 'D' $ aFiles[ X, F_ATTR ]
if aFiles[ X, F_NAME ] <> '.'
fPrueba( cPath + '\' + aFiles[ X, F_NAME ]
endif
endif
next
return nil
Se bloquea el codigo solo con gran volumen
Hola Antonio,
He optimizado el codigo y funciona bien mientras no sea un gran volumen de directorios. Por ejemplo, lo he probado con E: que es una estructura limitada.
Pero si le paso C:, se cuelga la aplicación.
No se por donde puede estar el fallo. A ver si me puedes ayudar. Aqui te muestro el codigo:
He optimizado el codigo y funciona bien mientras no sea un gran volumen de directorios. Por ejemplo, lo he probado con E: que es una estructura limitada.
Pero si le paso C:, se cuelga la aplicación.
No se por donde puede estar el fallo. A ver si me puedes ayudar. Aqui te muestro el codigo:
Code: Select all | Expand
static function fPrueba( cPath )
local x
local aFiles := Iif( SubStr( AllTrim( cPath ), Len( cPath ), 1 ) = "\",;
directory( cPath + '*.*' , 'D' ),;
directory( cPath + '\*.*', 'D' ) )
local nFilCount := len( aFiles )
for x := 1 to nFilCount
if 'D' $ aFiles[ X, F_ATTR ]
if aFiles[ X, F_NAME ] <> '.'
if SubStr( AllTrim( cPath ), Len( cPath ), 1 ) = "\"
fPrueba( cPath + aFiles[ X, F_NAME ] )
else
fPrueba( cPath + '\' + aFiles[ X, F_NAME ] )
endif
endif
endif
next
oGetMemo:cText += cPath + CRLF // := cDir
oGetMemo:Refresh()
return nil
- Antonio Linares
- Site Admin
- Posts: 42404
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 12 times
- Been thanked: 48 times
- Contact:
Le he puesto el SysRefresh() y ya no se cuelga.
Pero tarda un buen rato en generar la lista.
Este es el ejemplo:
Pero tarda un buen rato en generar la lista.
Este es el ejemplo:
Code: Select all | Expand
static function fPrueba( cPath )
local x
local aFiles := Iif( SubStr( AllTrim( cPath ), Len( cPath ), 1 ) = "\",;
directory( cPath + '*.*' , 'D' ),;
directory( cPath + '\*.*', 'D' ) )
local nFilCount := len( aFiles )
for x := 1 to nFilCount
if 'D' $ aFiles[ X, F_ATTR ]
if aFiles[ X, F_NAME ] <> '.'
if SubStr( AllTrim( cPath ), Len( cPath ), 1 ) = "\"
fPrueba( cPath + aFiles[ X, F_NAME ] )
else
fPrueba( cPath + '\' + aFiles[ X, F_NAME ] )
endif
endif
endif
next
oGetMemo:cText += cPath + CRLF // := cDir
oGetMemo:Refresh()
SysRefresh()
return nil