Есть ли еще какой-нибудь мониторинг процессов для файлов, созданных с использованием XMLDocument.Save () может столкнуться с частичным файлом? Имеет ли какое-либо значение, если Save () перезаписывает существующий файл?
Если вы сохраняете таким образом, у вас не должно быть никаких проблем.
using (var file = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)) { xmlDoc.Save(file); }
Запись файлов, в общем, не атомарна. Проверьте Process Monitor , чтобы получить представление о том, что предоставляет ОС.
XmlDocument.Save (строка) использует FileShare.Read . В решении ChaosPandion указано FileShare.None . Проверьте System.IO.FileShare на MSDN для различия.
Я не думаю, что есть какая-то гарантия атомарности. Вы не должны зависеть от этого.
Этот ответ https://stackoverflow.com/a/487198/1429390 обеспечивает AFAIK некоторую атомарность простым в использовании способом. Принцип заключается в том, чтобы записать во временный файл и предоставить вызывающей стороне возможность переименовать файл (и все, что вы хотите) в ближайшее время. Таким образом, все, что может произойти при создании и заполнении файла, не может перекрыть возможно существующий файл.
Обновление: за исключением того, что это не так, потому что System.IO.File.Move () отказывается перезаписывать. См. https://stackoverflow.com/a/10305475/1429390 для обхода.