2008-11-10 15 views
7

Quiero agregar algunos nodos a un documento xml usando Linq2XML. El archivo en cuestión está siendo utilizado por otros procesos y deberían poder leer el archivo mientras lo actualizo. Así me ocurrió con esta solución, que obviamente no es la forma correcta (El método doc.Save() falla y dice que otro proceso está utilizando el archivo):Cómo abrir correctamente un FileStream para su uso con un XDocument

using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.Read)) 
{ 
    doc = XDocument.Load(new StreamReader(fs)); 
    doc.Root.Add(entry); 
    doc.Save(filename); 
    fs.Close(); 
} 

Cualquier ayuda es appreceated en gran medida.

Respuesta

8

Cargue el documento, cierre la secuencia, guárdela de nuevo. Eso también significa que puede abrirlo de una manera más simple :)

XDocument doc; 

using (StreamReader reader = File.OpenText(filename)) 
{ 
    doc = XDocument.Load(reader); 
    doc.Root.Add(entry); 
} 

doc.Save(filename); 
+0

gracias por su respuesta, jon. si uso esta versión, ¿puedo asegurarme de que otros procesos puedan abrir el mismo archivo para el acceso de lectura? – Mats

+0

Bueno, no pueden leerlo cuando llamas a Save ... ¿es eso un problema? No puedo recordar lo que File.OpenText hace en términos de compartir, pero puede verificar y usar fácilmente un constructor de StreamReader haciendo lo correcto si es necesario. –

Cuestiones relacionadas