2008-11-10 4 views
7

Ich möchte einige Knoten an ein XML-Dokument mit Linq2XML anfügen. Die fragliche Datei wird von anderen Prozessen verwendet und sollte in der Lage sein, die Datei zu lesen, während ich sie aktualisiere. So kam ich mit dieser Lösung auf, die offensichtlich nicht die richtige Art und Weise (Verfahren doc.Save() schlägt fehl, und sagen, dass ein anderer Prozess die Datei verwendet):So öffnen Sie einen FileStream für die Verwendung mit einem 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(); 
} 

Jede Hilfe ist sehr appreceated.

Antwort

8

Laden Sie das Dokument, schließen Sie den Stream und speichern Sie ihn erneut. Das bedeutet auch, dass Sie es einfacher öffnen können :)

XDocument doc; 

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

doc.Save(filename); 
+0

danke für Ihre Antwort, jon. Wenn ich diese Version verwende, kann ich sicherstellen, dass andere Prozesse dieselbe Datei für Lesezugriff öffnen können? – Mats

+0

Nun, sie können nicht lesen, wenn Sie Save aufrufen ... ist das ein Problem? Ich kann mich nicht erinnern, was File.OpenText in Bezug auf die Freigabe tut, aber Sie könnten einfach einen StreamReader-Konstruktor überprüfen und verwenden, der das Richtige tut, wenn nötig. –

Verwandte Themen