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

MoveFile me bloquea los ficheros

Estas en el tema de MoveFile me bloquea los ficheros en el foro de ASP Clásico en Foros del Web. Hola, ¿Alguien sabe porque se me pueden estar bloqueando las imágenes que renombro mediante este código? <% Set oFS = CreateObject("Scripting.FileSystemObject") if (oFS.FileExists(Server.Mappath(ruta&RUF_nuevoFiche ro))) then ...
  #1 (permalink)  
Antiguo 23/06/2008, 04:46
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 21 años, 5 meses
Puntos: 1
MoveFile me bloquea los ficheros

Hola, ¿Alguien sabe porque se me pueden estar bloqueando las imágenes que renombro mediante este código?

<%
Set oFS = CreateObject("Scripting.FileSystemObject")
if (oFS.FileExists(Server.Mappath(ruta&RUF_nuevoFiche ro))) then
if (oFS.fileExists(Server.Mappath(ruta&IDFOTO))) then
response.Write("El fichero de destino ya existe")
oFS.DeleteFile(Server.Mappath(ruta&RUF_nuevoFicher o))
else
oFS.MoveFile (Server.Mappath(ruta&RUF_nuevoFichero)),(Server.Ma ppath(ruta&IDFOTO))
end if
end if
set oFS = nothing
%>

He deetcatdo que cuando utilizo la función Movefile luego no puedo eliminar esos ficheros, el sistema me dice que "estan en uso"

¿?¿?¿?¿?
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #2 (permalink)  
Antiguo 24/06/2008, 04:37
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: MoveFile me bloquea los ficheros

__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #3 (permalink)  
Antiguo 24/06/2008, 11:43
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
Respuesta: MoveFile me bloquea los ficheros

Y cuando querés eliminar esos ficheros... ¿lo hacés mediante un script o desde, digamos, el Explorador de Windows?
__________________
...___...
  #4 (permalink)  
Antiguo 24/06/2008, 12:25
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: MoveFile me bloquea los ficheros

Gracias Al Zuwaga por responder.

Cuando intento eliminarlo lo hago mediante un script, es este:

<%
set oFS = server.CreateObject("Scripting.FileSystemObject")
if oFS.FileExists(imagen) then
oFS.DeleteFile(imagen)
end if
set oFS = NOTHING
%>

Me tiene descolocado, porque si subo el fichero y no lo renombro mediante la función Movefile, si no que dejo al fichero con su nombre original, puedo eliminarlo con esta función sin problemas, pero es cuando lo renombro cuando no me deja... El Movefile lo deja bloqueado o no sé si es que al rehacerlo de nuevo lo hace con derechos de lectura pero no de escritura, si fuera así, ni idea de como comprobarlo.
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #5 (permalink)  
Antiguo 24/06/2008, 12:35
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Respuesta: MoveFile me bloquea los ficheros

Nunca me ha sucedido nada parecido (será porque nunca he eliminado archivos de manera dinámica ) pero dado el error, te recomendaría en lugar de eliminar en ese lugar, darle valor a una variable booleana (seTieneQueEliminar=si/no) y seguir tu proceso, lo mueves o no, etc. Al final, destruye tu objeto FSO y crea uno nuevo si es que se tiene que eliminar...Por ahí con suerte se resuelve.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 24/06/2008, 18:05
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: MoveFile me bloquea los ficheros

Ufffffffff, ya he descubierto el problema. No se trata del objeto oFS como pensaba. Lo que sucede es que en esa misma página llamo a una función escrita en ASP.net para redimensionar las imágenes. El problema esta en el asp.net, utilizo el objeto System.Drawing y me deja bloqueado al fichero, por eso cuando lo intento eliminar, no me lo permite.

fullSizeImg = System.Drawing.Image.FromFile(imageUrl)

¿Alguien sabe porque se bloquea el fichero?

Gracias de antemano
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #7 (permalink)  
Antiguo 24/06/2008, 18:16
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Respuesta: MoveFile me bloquea los ficheros

Si claro por la misma razón, debes destruir ese objeto, aunque .NET te crea la costumbre de que el recolector lo hace por ti, tarda a veces bastante, por eso deja la imagen bloqueada, me parece que el método es Dispose

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #8 (permalink)  
Antiguo 24/06/2008, 18:20
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: MoveFile me bloquea los ficheros

Gracias goldman, estoy utilizando:

fullSizeImg.Dispose()

para cerrar el objeto, que por lo que he leído es como se cierra, pero lo sigue dejando bloqueado. Creo que es un defecto del System.Drawing
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #9 (permalink)  
Antiguo 24/06/2008, 18:27
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Respuesta: MoveFile me bloquea los ficheros

Mmmhh que raro, yo tuve alguna vez un problema smiilar pero era con un XML, al final resultó que eran dos llamadas a ese archivo las que yo hacía, pero solamente cerraba una de las instancias, por eso el bloqueo, a lo mejor podrías revisar en detalle tu función de redimensionar.
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #10 (permalink)  
Antiguo 24/06/2008, 18:34
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: MoveFile me bloquea los ficheros

Estoy revisando (No estoy muy ducho en Net) y creo que lo tengo bien:

Código:
<%@ Page Language="VB" Debug="true"%>
<%@Import Namespace="System.Drawing.Imaging" %>
<script language="VB" runat="server">
  Function ThumbnailCallback() as Boolean
    Return False
  End Function


  Sub Page_Load(sender as Object, e as EventArgs)
  
    'Read in the image filename to create a thumbnail of
    Dim imageUrl as String = Request.QueryString("img")
	Dim Ruta as string ="c:/inetpub/wwwroot//www/imagenes/imagenes_web/clasificados/"

	imageUrl = Ruta+imageUrl
    
    'Read in the width and height
Dim imageHeight as Integer = Request.QueryString("h")
Dim imageWidth as Integer = Request.QueryString("w")

    'Make sure that the image URL doesn't contain any /'s or \'s
    'If imageUrl.IndexOf("/") >= 0 Or imageUrl.IndexOf("\") >= 0 then
      'We found a / or \
     ' Response.End()
    'End If
    
    Dim fullSizeImg as System.Drawing.Image
    fullSizeImg = System.Drawing.Image.FromFile(imageUrl)	
		 

				'Redimensionamos proporcionalmente
						Dim intNewWidth,intNewHeight
						if imageWidth >= imageHeight then
							intNewWidth = (imageHeight*fullSizeImg.Width/fullSizeImg.Height)
							intNewHeight = imageHeight
							
						else 
							intNewWidth = imageWidth
							intNewHeight = (imageWidth*fullSizeImg.Height/fullSizeImg.Width)
						end if	
						if intNewWidth > imageWidth then
							intNewWidth = imageWidth
							intNewHeight = (imageWidth*fullSizeImg.Height/fullSizeImg.Width)
						end if	
						if intNewHeight > imageHeight then
							intNewWidth = (imageHeight*fullSizeImg.Width/fullSizeImg.Height)
							intNewHeight = imageHeight
						end if			
				'Fin redimensionar
    


    'Do we need to create a thumbnail?
    Response.ContentType = "image/jpeg"
    If intNewHeight > 0 and intNewWidth > 0 then
      Dim dummyCallBack as System.Drawing.Image.GetThumbNailImageAbort
      dummyCallBack = New System.Drawing.Image.GetThumbnailImageAbort(AddressOf ThumbnailCallback)

      Dim thumbNailImg as System.Drawing.Image
      thumbNailImg = fullSizeImg.GetThumbnailImage(intNewWidth, intNewHeight, dummyCallBack, IntPtr.Zero)

      'thumbNailImg.Save(Response.OutputStream, ImageFormat.Jpeg)
	  thumbNailImg.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg) 
	  
	  thumbNailImg.Dispose()
    Else
      'fullSizeImg.Save(Response.OutputStream, ImageFormat.Jpeg)
	  fullSizeImg.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg) 
	  fullSizeImg.Dispose()
	  
    End If
	
  End Sub
</script>
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #11 (permalink)  
Antiguo 24/06/2008, 22:57
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Respuesta: MoveFile me bloquea los ficheros

Bueno, no revisé tu código a conciencia, pero fíjate en fullSizeImg, se crea pero no siempre se destruye, hazle una prueba de escritorio a tu método, verás que hay salidas que dejan bloqueada la imagen.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #12 (permalink)  
Antiguo 25/06/2008, 03:32
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: MoveFile me bloquea los ficheros

u_goldman, como siempre tienes toda la razón. Tu capacidad de observación es impresionante. Estaba destruyendo el objeto fullSizeImg en la condicional, simplemente lo he vuelto a destruir al final y ya funciona perfectamente. Estaba totalmente ofuscado por la frustración y no lo veía.

Te agradezco enormemente tu paciencia y lo digo en serio, este foro no sería lo mismo sin ti.

Te debo un barril de birra!!
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #13 (permalink)  
Antiguo 25/06/2008, 10:14
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Respuesta: MoveFile me bloquea los ficheros

Sssshhhh nomás no lo digas en voz alta porque todos van a querer qué bueno que se resolvió...

Saludos yomesmo
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
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 11:37.