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

¿Como saber si un archivo existe en un servidor?

Estas en el tema de ¿Como saber si un archivo existe en un servidor? en el foro de ASP Clásico en Foros del Web. Buenas compañeros, un saludo La idea es la siguiente necesito pasar información de un servidor a otro, para lo que hago uso de un archivo ...
  #1 (permalink)  
Antiguo 04/06/2007, 07:03
Avatar de ALUCARD81  
Fecha de Ingreso: abril-2005
Mensajes: 62
Antigüedad: 19 años, 2 meses
Puntos: 0
Pregunta ¿Como saber si un archivo existe en un servidor?

Buenas compañeros, un saludo

La idea es la siguiente necesito pasar información de un servidor a otro, para lo que hago uso de un archivo XML en un servidor que contiene los datos que quiero recuperar en el otro, hasta ahi no hay lio, ya tengo un lector RSS y todo lo necesario.

El problema esta en que este archivo XML no siempre existe, porque cambia segun la fecha, o sea que tendria que tener un archivo por cada fecha con el siguiente formato X04062007.XML para hoy y X03052007 para el 3 de mayo de 2007. Pero se puede dar el caso que no exista un archivo para una fecha X, entonces lo que hice es un procedimiento que crea el archivo.xml en función a la fecha que recibe por URL.

Ahora lo que quiero es saber como puedo preguntar si el archivo existe, si es asi lo leo con el lector RSS y si no que ejecute el proceso que crea el archivo XML y luego recién lo lea, porque ya existiria.

Se reciben sugerencias, comentarios, críticas o dudas, gracias por su ayuda

Última edición por ALUCARD81; 05/06/2007 a las 07:22
  #2 (permalink)  
Antiguo 05/06/2007, 02:11
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Re: ¿Como saber si un archivo existe en un servidor?

Veamos si lo entiendo:

Tienes un servidor que ofrece RSS (hace de servidor RSS) y genera un archivo XML cada dia (independientemente de si se le llama o no) que se guarda en un directorio físico del servidor (o sea, usas MSXML.DOMDocument para generarlo y guardarlo o el FileSystemObject para guardarlo)

Por otro lado, tienes otro servidor (hace de cliente RSS) que solicita al otro servidor un archivo RSS según unos parámetros que le envias via GET.

Lo que quieres es que el servidor que actua de servidor RSS compruebe si ya existe el archivo RSS que solicita el cliente. En caso de que exista le devuelva dicho archivo y en el caso de que no exista lo genere y lo guarde y se lo envie al cliente. ¿Es asi?
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #3 (permalink)  
Antiguo 05/06/2007, 07:21
Avatar de ALUCARD81  
Fecha de Ingreso: abril-2005
Mensajes: 62
Antigüedad: 19 años, 2 meses
Puntos: 0
Re: ¿Como saber si un archivo existe en un servidor?

Bueno por ahi, solo que el archivo no se genera automáticamente, pero es una gran idea hacerlo asi, es posible, pero ese no es el tema.

Efectivamente, estoy habilitando un servidor que haga de servidor RSS, y crea los archivos en un directorio físico. Si por otro lado tengo otro servidor que solicita ese archivo segun parámetros GET.

Cita:
Lo que quieres es que el servidor que actua de servidor RSS compruebe si ya existe el archivo RSS que solicita el cliente. En caso de que exista le devuelva dicho archivo y en el caso de que no exista lo genere y lo guarde y se lo envie al cliente. ¿Es asi?
Exactamente querido compañero, creo que tu explicaste mejor el problema, gracias por tomarte la molestia tammander, un saludo

Última edición por ALUCARD81; 05/06/2007 a las 09:51
  #4 (permalink)  
Antiguo 05/06/2007, 08:54
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Re: ¿Como saber si un archivo existe en un servidor?

Pues yo lo haria mas o menos asi:

-La llamada desde el cliente lo haría a traves del objeto XMLHTTP que llamaría a una página .asp en el servidor. Dicho objeto puede devolver tanto texto plano como XML.

- En el servidor, dicha página .asp contendría un objeto MSXML.DOMDocument que se encargaría de comprobar si existe dicho archivo usando su método LoadXML y una gestion de error:

Código:
    objDoc.loadXML(strFile)
    if objDoc.parseError.errorCode <> 0 Then
        response.Write("Error de Lectura (Por favor, ponerse en contacto con el webmaster).<br />FilePos: " & objDoc.parseError.filepos & "<br /> Línea: " & objDoc.parseError.Line & "<br /> Causa: " & objDoc.parseError.reason & "<br /> Ocurrió en: " & objDoc.parseError.srcText & "<br /> Archivo: " & objDoc.parseError.URL)
    end if
Te pongo toda la gestion de error por si te sirve de algo pero el método devuelve true si todo ha ido bien o false si no.

En caso de que todo haya ido bien, es tan facil como:

if objXML.loadXML(talarchivo.xml) then response.write objXML.xml

Y la página que devolvería sería el XML guardado.

En caso de que no exista, puedes crearlo con dicho objeto y finalmente guardarlo con el método save. Por ejemplo

objXML.save c:\inetpub\wwwroot\xml\xml_10_04_2007.xml

Si te fijas, realmente no necesitas guardar el RSS en ningun archivo físico ya que puedes generarlo cada vez que es solicitado. La única ventaja que tiene guardarlo en un archivo es la rapidez (con una sola linea de código se devuelve). Sus desventajas son principalmente que cuando lleves 6 o 7 meses, habrá una cantidad considerable de archivos RSS y serán asequibles para cualquiera que sepa lo que tiene que buscar.

De la otra forma, simplemente generas el RSS de forma dinámica dejando el disco duro del servidor mas o menos impoluto


NOTA: XMLHTTP tambien dispone de la propiedad status:

if objXMLHTTP.status = 200 then ' Todo ha ido bien

else ' Nada, no funca

end if


Espero haberte ayudado


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -

Última edición por tammander; 05/06/2007 a las 09:02
  #5 (permalink)  
Antiguo 05/06/2007, 09:47
Avatar de ALUCARD81  
Fecha de Ingreso: abril-2005
Mensajes: 62
Antigüedad: 19 años, 2 meses
Puntos: 0
De acuerdo Gracias por la ayuda!!

En verdad agradezco tu ayuda, me diste varias cosas en cuales pensar y echarle cabeza.

Pues la forma que tu dices no me funciona, porque en el servidor de RSS, al parecer no soporta XMLHTTP, o quizas esta mal configurado, porque me sale

Código:
Error 80004005
'Desconocido'
Lo de crear los archivos XML, es que son necesairos porque algunos tendrian incluso que ser de hace dos años y la idea es no depender de la generación dinámica, sino poder consultar los archivos individualmente para que la respuesta sea más rápida.

T cuento que ya tengo casi todo solucionado, tengo un proceso que verifica si el archivo existe y si no lo crea (en teoria), estoy abusando del Response.Redirect, que lo hago brincar del cliente RSS al servidor RSS, pero ahora ya no puedo hacerlo volver otra vez al cliente RSS.

Me explico
En el cliente pregunto por la fecha, con esa fecha va al servidor y ejecuta un proceso que verifica si el archivo existe

Código:
......
Dim FSO, Archivo
Archivo = Ruta&"a"&Diaz&Mesz&Ano&".xml"
Set FSO = CreateObject("Scripting.FileSystemObject")
IF (FSO.FileExists(Archivo)) Then
Response.Redirect("http://servidorcliente/cliente_rss.asp?A="&"a"&Diaz&Mesz&Ano&".xml")
Else
Dim objXMLHTTP, xml
  'Aqui creo el archivo en caso de no existir
  'Quisiera que esto se ejecute directamente y no tener que hacer el Response.Redirect
  Response.Redirect("xml.asp?F="&Request.QueryString("F"))
  'Pero me quede sin Response.Redirect para devolverlo al cliente
  'Response.Redirect("http://servidorcliente/cliente_rss.asp?A="&"a"&Diaz&Mesz&Ano&".xml")
End IF
...
Como ves mi problema esta en ejecutar xml.asp y luego hacer un redirect al servidor cliente RSS, claro una solución seria hacer el REdirect en xml.asp, pero como te digo es un proceso que se va ejecutar a veces en el Servidor RSS y no necesito que siempre vaya al cliente RSS. Asi que no puedo el Response.Redirect, ahi, me preguntaba si existia alguna forma de ejecutar xml.asp sin usar XMLHTTP.

Gracias por tus sugerencias, comentarios y dudas

Última edición por ALUCARD81; 05/06/2007 a las 09:53
  #6 (permalink)  
Antiguo 06/06/2007, 03:58
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Re: ¿Como saber si un archivo existe en un servidor?

¿Estas seguro de que no dispones de una interfaz de peticiones (un ActiveX) XMLHttpRequest tan usado en AJAX y que ya incorporan de forma interna la mayoría de los navegadores? Chequealo, a ver si el error que te sale es por otra causa. De todas formas, ¿Cómo haces la petición desde el cliente?
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #7 (permalink)  
Antiguo 06/06/2007, 07:05
Avatar de ALUCARD81  
Fecha de Ingreso: abril-2005
Mensajes: 62
Antigüedad: 19 años, 2 meses
Puntos: 0
Gracias,

Bueno la cosa va asi, en el cliente lo que hago es http://clienterss/n.asp?F=12/1/2007

y su código simplemente es una linea
n.asp
Código:
<%@LANGUAGE="VBSCRIPT"%> 
<%
Response.Redirect("http://servidorrss/xml/vxml.asp?F="&Request.QueryString("F"))
%>
Con esto va al servidor RSS quien verifica la existencia del archivo XML correspondiente a esa fecha
vxml.asp
Código:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
' Ruta en la que se guardan los archivos fisicamente
Ruta = "Esta es una ruta física en el servidor RSS"
%>
<%
Dia = Day(Request.QueryString("F"))
Mes = Month(Request.QueryString("F"))
Ano = Year(Request.QueryString("F"))

'Esta parte es para generar los nombres de la forma 01012007.xml en vez de 112007.xml
If Dia < 10 Then
	Diaz = "0"&Dia
Else
	Diaz = Dia
End If

If Mes < 10 Then
	Mesz = "0"&Mes
Else
	Mesz = Mes
End If

%>
<%
Dim FSO, Archivo
Archivo = Ruta&"a"&Diaz&Mesz&Ano&".xml"
Set FSO = CreateObject("Scripting.FileSystemObject")
IF (FSO.FileExists(Archivo)) Then
' Este el proceso que ya lee el xml, siempre y cuando exista
Response.Redirect("http://clienterss/nxml.asp?A="&"a"&Diaz&Mesz&Ano&".xml")
'Response.Write "El archivo " & Archivo & " Existe!"
Else
' Este ASP es el que me crea los archivos en función a una fecha existente
Response.Redirect("xml.asp?F="&Request.QueryString("F"))


'A partir de aqui ya no funciona, porque obviamente ya se fue a xml.asp
Response.Redirect("http://clienterss/nxml.asp?A="&"a"&Diaz&Mesz&Ano&".xml")

End IF
%>
Ahora trate de hacer lo de xml.asp mediante Server.Execute, para poder usar luego el Response.Redirect que me devuelva al clienterss, pero al parecer no acepta parámetros

Código:
Server.Execute("xml.asp?F="&Request.QueryString("F"))
o quizas existe un error en el código en la parte de Server.Execute

Hasta estuve pensando colocar una página intermedia, que haga la redirección, se me acaban las ideas y ya no se que más hacer
  #8 (permalink)  
Antiguo 06/06/2007, 08:39
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Re: ¿Como saber si un archivo existe en un servidor?

A ver que tal este código para el vxml.asp despues de los if .. then

Código:
 Dim FSO, Archivo
Archivo = Ruta&"a"&Diaz&Mesz&Ano&".xml"
Set FSO = CreateObject("Scripting.FileSystemObject")
IF (FSO.FileExists(Archivo)) Then
      ' Leemos el xml en este mismo archivo       
       Set objFile = FSO.OpenTextFile(Archivo, 1)       ' Itineramos hasta el final del archivo y lo dibujamos en este mismo archivo
       Do Until objFile.AtEndOfStream
              response.write(objFile.ReadLine & vbCrLf) 
      Loop

      objFile.Close
Else
       ' Pon aqui el código del archivo xml.asp y procesa directamente desde aqui
       ' No hagas ningun redirect

End IF 

Todo esto desde luego lo que hará es presentar en pantalla un archivo xml ya que eso es lo que haces desde n.asp

A todo esto, ¿que es lo que quieres hacer con el archivo RSS? ¿procesarlo para ponerlo en algun div a modo de cartel de noticias? ¿Algun servicio web?


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #9 (permalink)  
Antiguo 13/06/2007, 09:37
Avatar de ALUCARD81  
Fecha de Ingreso: abril-2005
Mensajes: 62
Antigüedad: 19 años, 2 meses
Puntos: 0
Gracias por los consejos amigo tammander y disculpa por la demora en la respuesta

Primero que nada siento respodner despues de una semana, no es falta de cortesía, es que tuve que hacer un viaje imprevisto de emergencia, pero ya volvi.

Bueno te cuento que ya solucione el tema, lo que hago es guardar los datos de la fecha en una Cookie, luego utilizo

Código:
Server.Execute("xml.asp")
para general el xml, nada más que ahora no le paso parametros por URL, porque al parecer no se hacerlo o el Server.Execute no funciona de esa manera. Pero esa es harina de otro saco y luego hago el tan necesitado Redirect para volver al Cliente RSS

Cita:
A todo esto, ¿que es lo que quieres hacer con el archivo RSS? ¿procesarlo para ponerlo en algun div a modo de cartel de noticias? ¿Algun servicio web?
Con respecto a tus preguntas, si es algo parecido a un servicio de noticias, es que el servidor RSS lo actualizan varias personas que mandan sus textos, pero el cliente es otra página a la que estas personas no acceden, por cuestiones operativas. Pues eso de Servicio Web, no estoy familiarizado muy bien con el término, pero creo que se le acerca.

Gracias por la ayuda y las ideas, aprendi algunas cosillas más y si necesitas saber algo más no dudes en preguntar. Un abrazo y gracias por todo

FIN DEL COMUNICADO
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 20:12.