Является ли 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 для обходного пути.

Другие вопросы по тегам