Вы нашли ошибку в фреймворке. XDocument.Save (string) использует инструкцию «using», чтобы обеспечить удаление выходного потока. Это зависит от кодировки, которую вы использовали в инструкции по обработке, но внутренний System.Xml.XmlUtf8RawTextReader был бы обычным для реализации средства записи текста.
Ошибка: программист Microsoft, написавший этот класс, забыл реализовать метод Dispose (). Реализован только метод Close ().
Довольно странно, что об этой ошибке еще не сообщалось на сайте обратной связи connect.microsoft.com. Это должно вызвать проблемы в общем использовании, потому что файл остается открытым, пока не завершится поток финализатора. Хотя обычно это не занимает много времени, пару секунд или около того. За исключением вашего случая, когда вы выходите из программы сразу после записи и, к сожалению, вам не хватает свободного места на диске в тот момент, когда буфер очищается.
Обходной путь для этой ошибки - вместо этого использовать перегрузку XDocument.Save (TextWriter), передавая StreamWriter, кодировка которого соответствует кодировке XML.