2008-11-10 11 views
7

Chcę dołączyć niektóre węzły do ​​dokumentu XML przy użyciu Linq2XML. Ten plik jest używany przez inne procesy i powinien być w stanie odczytać plik podczas jego aktualizacji. Więc wymyśliłem tego rozwiązania, co oczywiście nie jest prawidłowy sposób (Metoda doc.Save() nie powiedzie się i mówi, że inny proces używa pliku):Jak poprawnie otworzyć FileStream do użytku z XDocumentem

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(); 
} 

Każda pomoc jest znacznie appreceated.

Odpowiedz

8

Załaduj dokument, zamknij strumień, zapisz go ponownie. Oznacza to również, że możesz go otworzyć w prostszy sposób:

XDocument doc; 

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

doc.Save(filename); 
+0

dzięki za odpowiedź, jon. jeśli używam tej wersji, czy mogę upewnić się, że inne procesy mogą otworzyć ten sam plik dla odczytu? – Mats

+0

Cóż, nie mogą z niego czytać, gdy zadzwonisz Save ... czy to jest problem? Nie pamiętam, co File.OpenText robi w zakresie udostępniania, ale możesz łatwo sprawdzić i użyć konstruktora StreamReader, wykonując właściwą czynność, jeśli to konieczne. –