Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema en el manejo de archivos

Estas en el tema de Problema en el manejo de archivos en el foro de .NET en Foros del Web. Hola compañeros. Veréis, tengo un pequeño problema a la hora de manejar ficheros, es decir, borrarlos, cargarlos, etc etc. Tengo un control de imágenes que ...
  #1 (permalink)  
Antiguo 03/07/2008, 08:11
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 meses
Puntos: 0
Pregunta Problema en el manejo de archivos

Hola compañeros. Veréis, tengo un pequeño problema a la hora de manejar ficheros, es decir, borrarlos, cargarlos, etc etc.

Tengo un control de imágenes que carga imágenes de archivos que tengo en el disco duro.
El problema viene cuando por ejemplo modifico un archivo, e inmediatamente en la siguiente línea de código utilizo ese archivo para algo. En éste caso imágenes.
En ese caso, muchas veces me da errores porque dice que no tiene acceso al archivo. Eso debe ser según creo porque el fichero está en uso y no le ha dado tiempo digamos a liberarse. Si dejo un pequeño espacio de tiempo lo abre bien. No se si me explico.

Por ejemplo, cada vez que cambia de un cliente a otro en un listbox cargo su imágen. Esa imagen es un fichero que se llama "imagenAux" que cambia cada vez que cambia de cliente siendo ya la foto del cliente. Entonces esa imadenAUX la cargo en el control de imagen par amostrala, pero si el cambio entre clientes lo hago rápido, pues falla porque dice que no tiene acceso al fichero imagenAux. Se ve que necesita un periodo de tiempo entre que se modifica el archivo hasta que se puede usar.
Sabéis a lo que me refiero?? Y lo más importante, sabéis como solucionarlo???
Gracias
  #2 (permalink)  
Antiguo 03/07/2008, 12:20
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Problema en el manejo de archivos

-Puedes poner tu codigo?
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 04/07/2008, 01:25
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Problema en el manejo de archivos

Cita:
Iniciado por Peterpay Ver Mensaje
-Puedes poner tu codigo?
Dicho y hecho. :D

Código:
If System.IO.File.Exists(sRuta + "\fotos\" + TxtDNI.Text + ".jpg") = True Then
        ImgFoto.Image = Nothing
        ImgFoto.Refresh()
        System.IO.File.Delete(sRuta + "\fotos\" + TxtDNI.Text + ".jpg")
End If
TE cuento. En éste caso por ejemplo lo que quiero hacer es borrar una ficha de un cliente. Lógicamente al borrar su registro de la Base de datos, también borro su foto que está en una carpeta de la aplicación.
Como la imágen está cargada en un control imagen para mostrar al usuario, no me deja borrar el archivo porque dice que está siendo utilizado.
Por ello lo primero que hago es quitar la foto cargada del control imagen, y luego intento borrar el archivo, pero me salta una excepción al intentar borrarlo diciendo que no tiene acceso al archivo.
Sin embargo al controlar la excepción, vuelvo a darle a borrar, y al pasar otra vez por ahí, ya si me deja borrarlo perféctamente. Se ve que ya ha pasado el tiempo necesario para que el Sistema operativo entienda que el archivo ya está libre, o algo similar.
Me explico bien??

Gracias
  #4 (permalink)  
Antiguo 07/07/2008, 01:19
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Problema en el manejo de archivos

No se os ocurre nada por donde pueda venir el problema???
  #5 (permalink)  
Antiguo 08/07/2008, 08:09
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Problema en el manejo de archivos

Bueno ya está resuelto el problema. Era un pequeño despiste pero claro que no pensé en ello. Pongo la solución para que todos podamos aprender y que no os pase a ninguno.
El problema radicaba en que a la hora de cargar la imágen, en lugar de hacer PictureBox.Load creaba un objeto de tipo System.Drawing.imagen donde cargaba la imágen y luego se lo ponía a la propiedad PictureBox.image.
Cada vez que cargaba un cliente, cargaba su foto con ese método. Al intentar eliminar uno, intentaba eliminar el archivo de foto, para lo que liberaba el PictureBox de la imágen, pero por alguna razón el objeto de tipo System.Drawing.imagen seguía cargado en memoria utilizando dicho archivo, con lo que no me dejaba borrarlo.
¿Cuándo funcionaba? Pues supongo que cuando el recolector de basura hacía la limpia y liberaba ese recurso, si no lo había hecho, que era lo más normal, pegaba el pete.
Para arreglarlo no dejé "suelto" ese objeto, para que no esté cargado en memoria, y así sin ningún problema borro el archivo.

Espero que sirva para que otro no cometa mi mismo fallo :D ;)
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 18:48.