none
Problema con utilizar de nuevo un xml RRS feed

  • Pregunta

  • Hola me encuentro en una situacion que no se como resolverla estoy en una aplicacion de escritorio en wpf y usando constantemente un archivo xml y no se como cerrar despues de usuarlo. por este motivo me sale este error El proceso no puede obtener acceso al archivo 'C:\DocumentosPlaneacion\ArbolUbicacionTareas.xml' porque está siendo utilizado en otro proceso. ¿como puedo resolver este problema? muchas gracias.
    miércoles, 9 de junio de 2010 19:40

Respuestas

  • Hola luisafer.

    Con los recursos no manejados como pueden ser accesos a BBDD, archivos, etc. siempre hay que tener este tipo de cuidados, se deben de cerrar para que puedan ser accedidos desde otras zonas.

    Para ello generalmente tienes varias opciones, una de ellas y de las mas seugras es el uso de 'using', de modo que ese objeto solo estara disponible para ese codigo:

     

    using (variable = new variable)
    {
    // ... codigo
    }

     

    donde la variable seria la creacion del archivo (FileStream o cualquier otra). Esta forma te asegura que en caso de error, siempre se va a cerrar el archivo y nunca se quedara abierto (por eso es la mas segura).

    Luego existen otros metodos, estos objetos generalmente implementan las funciones Open/Close y Dispose, las primeras son para abrir y cerrar, suelen ser usadas cuando se va a usar mas veces el archivo, de modo que no se destruye el objeto pero si que eliminan el manejador que el SO les otorga para el uso del recurso, asi, el proximo open es mas rapido que la creacion de un nuevo objeto con new.

    La segunda funcion 'Dispose' es ya para cuando no se vaya a usar el archivo, esta directamente cierra el handle y elimina el objeto completamente (obviamente bajo el funcionamiento del recolector de basura de .net), de modo que este es el caso para cuando el archivo no va a ser utilizado mas veces o muy pocas veces.

    El problema de estas ultimas funciones es que todo codigo de manejo de recursos no manejado, deberia ir entre bloques try/catch, y si es posible un finally, ya que si ocurre algun error en su uso, estos bloques deberian de liberar el recurso, de no liberarse permaneceran abiertos hasta que se cierren o se cierre la aplicacion.

     


    Saludos
    David González
    • Marcado como respuesta luisafer jueves, 10 de junio de 2010 14:57
    jueves, 10 de junio de 2010 7:14

Todas las respuestas

  • Hola luisafer.

    Con los recursos no manejados como pueden ser accesos a BBDD, archivos, etc. siempre hay que tener este tipo de cuidados, se deben de cerrar para que puedan ser accedidos desde otras zonas.

    Para ello generalmente tienes varias opciones, una de ellas y de las mas seugras es el uso de 'using', de modo que ese objeto solo estara disponible para ese codigo:

     

    using (variable = new variable)
    {
    // ... codigo
    }

     

    donde la variable seria la creacion del archivo (FileStream o cualquier otra). Esta forma te asegura que en caso de error, siempre se va a cerrar el archivo y nunca se quedara abierto (por eso es la mas segura).

    Luego existen otros metodos, estos objetos generalmente implementan las funciones Open/Close y Dispose, las primeras son para abrir y cerrar, suelen ser usadas cuando se va a usar mas veces el archivo, de modo que no se destruye el objeto pero si que eliminan el manejador que el SO les otorga para el uso del recurso, asi, el proximo open es mas rapido que la creacion de un nuevo objeto con new.

    La segunda funcion 'Dispose' es ya para cuando no se vaya a usar el archivo, esta directamente cierra el handle y elimina el objeto completamente (obviamente bajo el funcionamiento del recolector de basura de .net), de modo que este es el caso para cuando el archivo no va a ser utilizado mas veces o muy pocas veces.

    El problema de estas ultimas funciones es que todo codigo de manejo de recursos no manejado, deberia ir entre bloques try/catch, y si es posible un finally, ya que si ocurre algun error en su uso, estos bloques deberian de liberar el recurso, de no liberarse permaneceran abiertos hasta que se cierren o se cierre la aplicacion.

     


    Saludos
    David González
    • Marcado como respuesta luisafer jueves, 10 de junio de 2010 14:57
    jueves, 10 de junio de 2010 7:14
  • Muchas gracias ya resolvi mi problema con using.
    jueves, 10 de junio de 2010 14:56