Является ли XMLDocument.Save атомарной операцией? - PullRequest
6 голосов
/ 20 апреля 2010

Есть ли еще какой-нибудь мониторинг процессов для файлов, созданных с использованием XMLDocument.Save () может столкнуться с частичным файлом? Имеет ли какое-либо значение, если Save () перезаписывает существующий файл?

Ответы [ 4 ]

7 голосов
/ 20 апреля 2010

Если вы сохраняете таким образом, у вас не должно быть никаких проблем.

using (var file = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
{
    xmlDoc.Save(file);
}
2 голосов
/ 21 апреля 2010

Запись файлов, в общем, не атомарна. Проверьте Process Monitor , чтобы получить представление о том, что предоставляет ОС.

XmlDocument.Save (строка) использует FileShare.Read . В решении ChaosPandion указано FileShare.None . Проверьте System.IO.FileShare на MSDN для различия.

2 голосов
/ 20 апреля 2010

Я не думаю, что есть какая-то гарантия атомарности. Вы не должны зависеть от этого.

0 голосов
/ 16 июля 2015

Этот ответ https://stackoverflow.com/a/487198/1429390 обеспечивает AFAIK некоторую атомарность простым в использовании способом. Принцип заключается в том, чтобы записать во временный файл и предоставить вызывающей стороне возможность переименовать файл (и все, что вы хотите) в ближайшее время. Таким образом, все, что может произойти при создании и заполнении файла, не может перекрыть возможно существующий файл.

Обновление: за исключением того, что это не так, потому что System.IO.File.Move () отказывается перезаписывать. См. https://stackoverflow.com/a/10305475/1429390 для обхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...