Foros del Web » Programando para Internet » ASP Clásico »

FSO recursivo... mi cabeza está por explotaaaarrrrrrrr

Estas en el tema de FSO recursivo... mi cabeza está por explotaaaarrrrrrrr en el foro de ASP Clásico en Foros del Web. Después de mucho luchar con una maldita función para listar toooodas las carpetas y subcarpetas en una estructura de árbol, me está dando un error ...
  #1 (permalink)  
Antiguo 28/10/2004, 13:41
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
FSO recursivo... mi cabeza está por explotaaaarrrrrrrr

Después de mucho luchar con una maldita función para listar toooodas las carpetas y subcarpetas en una estructura de árbol, me está dando un error que puedo solucionar colocando "on error resume next"... pero no quiero. Lo que quiero es que no de ningún error.

La función es ésta:


Código:
<%
Sub CrearArbol(Ruta, Nivel)
	Set FSO = Server.CreateObject("Scripting.FileSystemObject")
	Set Carpeta = FSO.GetFolder(Ruta)
	Set Subcarpetas = Carpeta.SubFolders
		For Each SubCarpeta in Subcarpetas
			Response.Write Replace(Space(Nivel), " ", "----")
			Response.Write Subcarpeta.Name & "<br>"
				CrearArbol Subcarpeta.Path, Nivel + 1
			On error resume next
			Response.Write Replace(Space(Nivel), " ", "----")
			If Error.Number <> 0 Then Response.Write "<b>Acá esta cagado:</b> " & Err.Number & " - " & Err.Description & "<br>"
		Next
End Sub 'CrearArbol
%>

<% Call CrearArbol(Request.ServerVariables("APPL_PHYSICAL_PATH"),0) %>

La onda es que da error cuando termina de recorrer las carpetas/subcarpetas y no encuentra ninguna más para continuar. Con el "on error resume next" continúa la ejecución hasta el final, pero como dije no deseo que exista el "on error.." en el código.

Se les ocurre cómo modificarla para que funcione bien?
Ya no puedo pensar más
__________________
...___...
  #2 (permalink)  
Antiguo 28/10/2004, 14:29
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Bueno, AZ, tranquilo, vamos a ver tu código............, pero mañana por que ya es hora de irnos, jejeje

Pero antes, ¿qué no estas reinventando la rueda? (http://www.brainjar.com/asp/dirlist/, http://www.aspin.com/func/content?tr...ile&id=2329310).

Saludos
  #3 (permalink)  
Antiguo 28/10/2004, 14:30
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Pues tu código no me dió ningún error mas que un script timeout je je je, le cambié el path y lo utilicé en una carpeta, con menos directorios y subdirectorios...funcionó "josha"

Código:
Sub CrearArbol(Ruta, Nivel)
	Set FSO = Server.CreateObject("Scripting.FileSystemObject")
	Set Carpeta = FSO.GetFolder(Ruta)
	Set Subcarpetas = Carpeta.SubFolders
		For Each SubCarpeta in Subcarpetas
			Response.Write Replace(Space(Nivel), " ", "----")
			Response.Write Subcarpeta.Name & "<br>"
				CrearArbol Subcarpeta.Path, Nivel + 1
			'On error resume next
			'Response.Write Replace(Space(Nivel), " ", "----")
			'If Error.Number <> 0 Then Response.Write "<b>Acá esta cagado:</b> " & Err.Number & " - " & Err.Description & "<br>"
		Next
End Sub 'CrearArbol
%>

<%
 CrearArbol Server.MapPath(".") & "\",0 
 %>
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #4 (permalink)  
Antiguo 28/10/2004, 14:31
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 7 meses
Puntos: 4
Una pregunta: ¿qué función tiene la línea que hay después de "On error"? Yo he quitado las tres líneas que hay dentro del control de errores y se ve de maravilla, es decir, el código quita estas tres líneas:

Código:
On error resume next
Response.Write Replace(Space(Nivel), " ", "----")
If Error.Number <> 0 Then Response.Write "<b>Acá esta ......
A ver qué tal.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #5 (permalink)  
Antiguo 28/10/2004, 14:33
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 7 meses
Puntos: 4
Vaya, se me ha adelantado u_goldman, je je, yo había hecho exactamente lo mismo: poner comilla simple en esas líneas.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #6 (permalink)  
Antiguo 28/10/2004, 15:18
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Cita:
u_g dijo: Pues tu código no me dió ningún error


Cita:
Brave también dijo: Yo he quitado las tres líneas que hay dentro del control de errores y se ve de maravilla



Cita:
Brave insiste y yo ya no puedo dejar de shorar: Vaya, se me ha adelantado u_goldman, je je, yo había hecho exactamente lo mismo: poner comilla simple en esas líneas.



PUES A MI NO ME FUNCIONA




Si le quito el control de errores me dice:

Cita:
Error de Microsoft VBScript en tiempo de ejecución (0x800A0046)
Permiso denegado
maldita_funcion.asp, line 51

(La línea 51 es: For Each SubCarpeta in Subcarpetas)

Con el control de errores me da ésto (a manera de ejemplo):

Código:
Carpeta1
----Carpeta1.1
--------Carpeta1.1.1
--------Acá esta cagado: 424 - Se requiere un objeto
--------Carpeta1.1.2
--------Acá esta cagado: 424 - Se requiere un objeto
--------Carpeta1.1.3
------------Carpeta1.1.3.1
------------Acá esta cagado: 424 - Se requiere un objeto
Acá esta cagado: 424 - Se requiere un objeto
Carpeta2 (no tiene subcarpetas)
Acá esta cagado: 424 - Se requiere un objeto
Fíjense que de arrores cuando llega a la última rama de cada rama del árbol.
Igual tengo dos errores.... El primero es el de Permiso denegado y el segundo es que se requiere un objeto. Éste último es el que quería solucionar, pero estaría bueno solucionar los dos.. ¿no?


Y... Myakire... el ejemplo de http://www.brainjar.com/asp/dirlist/ ya lo había visto... pero como también me daba errores de Permiso denegado lo había dejado de lado... ahora me doy cuenta que también tengo ese error con el otro script

Ya no sé qué es lo que ocurre
__________________
...___...
  #7 (permalink)  
Antiguo 28/10/2004, 15:26
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
A mi se me hace que el error de Se requiere un objeto es consecuencia del primero, al no tener permisos para acceder a esas subcarpetas, no puede crear el objeto...

http://www.aspfaq.com/show.asp?id=2090


A lo mejor es un problema en el user_id
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #8 (permalink)  
Antiguo 28/10/2004, 15:32
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Pero si seré pelotudo

Me olvidé de aclarar, u_g, que ya revisé ese artículo de aspfaq.com y verifiqué que IUSR_MiPCEsUnaMierda tenga los privilegios necesarios hasta para voltearse a mi hermana. .. e igual me da ese error
__________________
...___...
  #9 (permalink)  
Antiguo 28/10/2004, 15:42
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Acabo de replicar tu error cambiando los permisos de las subcarpetas...le quité todos los permisos a estas subcarpetas para la cuenta que tengo configurada en el IIS, y se comporta exactamente igual...verifica que en dihasc subcarpetas, el iuser_machine que utiliza el IIS, además de tener permisos con tu hermana , tenga permisos para acceder a estas, esto en seguridad de las carpetas, si tiene habilitado el checkbox de permitir la herencia del padre o un rollo así, y asigna permisos nuevos, casi seguro que debe ser eso...
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #10 (permalink)  
Antiguo 28/10/2004, 15:59
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535


Click derecho sobre "wwwroot" -> Botón "avanzada" -> Marcar "Reestablecer permisos en todos los bla, bla, bla... "

Claro... si hay alguna carpeta que no tenga los mismos permisos que "wwwroot", la función, al llegar a ella mediante su maldita-recursividad , iba a dar error de permisos.

Ahora si que funciona

Gracias.

PD: me parece que es al pedo lo que estoy haciendo porque creo que voy a hacer explotar a una función JS con la cantidad de carpetas y sub-sub-sub-carpetas que tengo
__________________
...___...
  #11 (permalink)  
Antiguo 24/08/2005, 22:38
Avatar de ElAprendiz  
Fecha de Ingreso: enero-2002
Ubicación: Maipu, Chile
Mensajes: 3.706
Antigüedad: 22 años, 4 meses
Puntos: 2
este script es lo que necesito. pero tengo un problema. necesito que por cada carpeta se cree un indice y un numero que indique de quien es el padre de esa carpeta.

lo primero lo hice agregando un simple contador dentro del bucle. pero lo segundo no he encontrado la forma de hacerlo. la idea es que quede como muestra la figura donde el primer numero es correlativo, y el segundo muestra cual es la carpeta padre.


⌂ dir1 (1,0)
|
|-⌂ dir2 (2,1)
| |
| |-⌂ dir3 (3,2)
| |-⌂ dir4 (4,2)
| |-⌂ dir5 (5,2)
|
|-⌂ dir6 (6,1)
|-⌂ dir7 (7,1)
|-⌂ dir8 (8,7)

por cierto Al parece que ando tras lo mismo que tu (un arbol de directorios expandible con Javascript). lo tienes hecho?

saludos
__________________
Manual de ASP Avanzado ;-)

Última edición por ElAprendiz; 24/08/2005 a las 23:21
  #12 (permalink)  
Antiguo 25/08/2005, 10:26
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
No, lo dejé de lado porque se hacía muy pesado el JS
__________________
...___...
  #13 (permalink)  
Antiguo 25/08/2005, 11:27
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 5 meses
Puntos: 16
yo tambien lo use y si funciono sin problemas

lo intente usar en local con PWS y me da error del objeto FSO (no se puede usar el FSO en PWS?) en mi hosting si funciono sin problemas, aunque no son tantas carpetas y subcarpetas no dio error

http://www.prokormex.com/prueba.asp
  #14 (permalink)  
Antiguo 25/08/2005, 22:49
Avatar de ElAprendiz  
Fecha de Ingreso: enero-2002
Ubicación: Maipu, Chile
Mensajes: 3.706
Antigüedad: 22 años, 4 meses
Puntos: 2
bueno no importa.. ya lo hice. cambie el javascript que tenia y me quedo de lujo para hacer un explorador web. cuando lo depure bien lo publico

gracias de todas maneras
__________________
Manual de ASP Avanzado ;-)
  #15 (permalink)  
Antiguo 25/08/2005, 23:43
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 9 meses
Puntos: 381
Cita:
Iniciado por Al Zuwaga
No, lo dejé de lado porque se hacía muy pesado el JS
¿y el archivo que te envié? quedó funcionando perfessto


EDIT By AlZ: Perdón, soy un pajerto... edité tu mensaje en vez de citarlo

Última edición por AlZuwaga; 26/08/2005 a las 10:07
  #16 (permalink)  
Antiguo 26/08/2005, 10:08
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Cita:
Iniciado por tunait
¿y el archivo que te envié? quedó funcionando perfessto

Si, y lo usé! Pero para otro proyecto: un tree con datos de una BD.

Lo que pretendía originalmente en éste post era mostrar la estructura de carpetas de un disco duro (de un sector de éste, en realidad) pero eran muchichisísimas carpetas, sub-carpetas y sub-sub-sub-...-carpetasN+1.
Por lo que el script JS se hacía pesadísimo de cargar (y en ocaciones entraba en timeout de ASP). Entonces abandoné la idea.

Salú
__________________
...___...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:03.