Я записываю некоторые события журнала в файл XML, каждые 5 минут я запускаю новый файл. Я использую XDocument и XElement, которые мне действительно нравятся,
_xDocument = XDocument.Parse("<LogEntires/>");
_xDocument.Root.Add(xElementLogEventList.ToArray());
_xDocument.Save(_outFileName);
Я бы хотел сохранять его на диске каждые 10 секунд или около того с помощью таймера, чтобы самые последние события были не только в памяти, и люди могли при необходимости просматривать файл. Но у XDocument есть только методы Save () и WriteTo (), которые пишут весь документ. И, думаю, без тега это будет неверный Xml в любом случае.
Моя следующая мысль - использовать XmlWriter и время от времени очищать мой FileStream, отслеживая добавление самого закрывающего тега ... и просто иметь недопустимый XML, пока я полностью не закончу и не закрою файл.
Мне бы очень хотелось, чтобы на диске был действительный Xml, и если я хочу написать корневой тег, а затем через пять или десять секунд, когда я сделаю следующий сброс, просто сделайте резервную копию и удалите корневой тег, добавьте следующую сотню элементы и написать и очистить поток. xmlWriter только вперед, поэтому я не уверен, что это самый эффективный способ сделать это.
Каков наиболее эффективный способ иметь действительный xml на диске, но продолжать передавать новые элементы в конце, а не переписывать весь документ каждый раз? Я боюсь, что мне не хватает чего-то очевидного, такого как xDocument.AppendUpdatesToFile (_outfile) или чего-то такого очевидного ...
Если нет, то как бы вы эффективно нашли и удалили окончательный корневой тег и добавили новые элементы в потоковом режиме?