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?
Busco un ejemplo de Tree para directorios
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- 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
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
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: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- 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
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