2012-02-17 19 views
9

Tengo un simple # función c que crea un archivo XML básico y ahorra:XmlDocument Guardar mantiene presentar abierta

private void CreateXMlFile(string Filename, string Name, string Company) 
     { 
      XmlDocument doc = new XmlDocument(); 
      XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null); 
      doc.AppendChild(docNode); 

      XmlNode licenseNode = doc.CreateElement("license"); 
      doc.AppendChild(licenseNode); 

      XmlNode node = doc.CreateElement("Name"); 
      node.AppendChild(doc.CreateTextNode(Name)); 
      licenseNode.AppendChild(node); 

      node = doc.CreateElement("Company"); 
      node.AppendChild(doc.CreateTextNode(Company)); 
      licenseNode.AppendChild(node); 


      doc.Save(Filename); 
     } 

Cuando trato de editar o borrar el archivo siempre consigo siguiente error:

The process cannot access the file because it is being used by another process.

XmlDocument no tiene ninguna disposición incorporada o rutinas cerradas y se preguntó cómo puedo forzar el cierre del archivo antes de editarlo o eliminarlo.

he tratado de guardar el archivo usando StreamWriter:

StreamWriter outStream = System.IO.File.CreateText(outfile); 
      outStream.Write(data); 
      outStream.Close(); 

Pero esto ni hacer una diferencia con el mismo error.

Su consejo es muy aceptado.

Gracias

+0

¿Ha intentado escribirlo con una instancia de una secuencia de escritura en lugar de pasar el nombre del archivo para guardar? – Steve

+0

Tuve el mismo problema, pero mi código estaba cargando el XML primero si existía. El objeto 'XmlReader' debe cerrarse antes de que se libere el bloqueo en el archivo. –

Respuesta

1

Su código es correcto. Lo probé en mi máquina y no hay bloqueo después de Guardar().

Intenta usar Unlocker (http://www.softpedia.com/get/System/System-Miscellaneous/Unlocker.shtml) para comprobar si realmente eres el que tiene el bloqueo.

¿Qué .NET framework usas? También hay un informe (http://bytes.com/topic/net/answers/467028-xmldocument-save-does-not-close-file-properly) que tampoco fue reproducible.

+0

Está siendo bloqueado por el estudio visual vshost.exe. Acabo de compilar para .net 3.5 y el mismo problema. – Belliez

+0

¿Podría crear un proyecto en blanco con ese método llamado mediante un clic de botón y verificar después del clic si el archivo está bloqueado? – BlueM

4

Enviar la transmisión al método de guardar XmlDocument en lugar del nombre del archivo.

private static void Main(string[] args) 
    { 
     CreateXMlFile("c:\\test.xml", "testName", "testCompany"); 
    } 

    private static void CreateXMlFile(string Filename, string Name, string Company) 
    { 
     XmlDocument doc = new XmlDocument(); 
     XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null); 
     doc.AppendChild(docNode); 

     XmlNode licenseNode = doc.CreateElement("license"); 
     doc.AppendChild(licenseNode); 

     XmlNode node = doc.CreateElement("Name"); 
     node.AppendChild(doc.CreateTextNode(Name)); 
     licenseNode.AppendChild(node); 

     node = doc.CreateElement("Company"); 
     node.AppendChild(doc.CreateTextNode(Company)); 
     licenseNode.AppendChild(node); 
     StreamWriter outStream = System.IO.File.CreateText(Filename); 

     doc.Save(outStream); 
     outStream.Close(); 
    } 

He intentado ejecutar el código anterior y está funcionando bien en mi extremo.

+0

Intenté esto y cuando voy a eliminar el archivo recibo el mismo error. – Belliez

+0

¿Puedes intentar cambiar la ubicación del archivo? – AshokD

+0

intenté una nueva ubicación también y la misma. También deshabilité Livedrive (copia de seguridad en línea) en caso de que esto interfiriera. – Belliez

Cuestiones relacionadas