Является ли XMLDocument.Save атомарной операцией?
В любом случае, существует ли другой процесс мониторинга файлов, созданных с использованием XMLDocument.Save() может встретиться с частичным файлом? Есть ли какая-то разница, если Save () перезаписывает существующий файл?
4 ответа
Если вы экономите таким образом, у вас не должно быть никаких проблем.
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 для различия.
Этот ответ /questions/43262572/ispolzovanie-memorystream-dlya-zapisi-v-xml/43262583#43262583 обеспечивает AFAIK некоторую атомарность в простой в использовании манере. Принцип заключается в том, чтобы записать во временный файл и предоставить вызывающей стороне возможность переименовать файл (и все, что вы хотите) в ближайшее время. Таким образом, все, что может произойти при создании и заполнении файла, не может заглушить возможно существующий файл.
Обновление: кроме как, потому что System.IO.File.Move() отказывается перезаписывать. См. /questions/22224911/mimic-filemove-esli-mesto-naznacheniya-uzhe-suschestvuet/22224938#22224938 для обходного пути.