Запись в XML-файл с помощью xmllite?

У меня есть XML-файл, который содержит набор "game"узлы (которые содержат информацию о сохраненном игровом процессе, так как вы сохраняете свою игру в любой консольной игре). Все это содержится внутри"games"Корневой узел. Я реализую функцию сохранения в этом XML-файле и хочу иметь возможность добавлять или перезаписывать"game"узел и его дочерние узлы в пределах"games"корневой узел.

Как это можно сделать с xmllite.dll?

1 ответ

Вы не можете физически "переписать на месте" любой текстовый файл (включая файл XML), за исключением редкого случая, когда вы можете гарантировать, что вы перезаписываете ровно столько байтов, сколько было. Что вам всегда нужно сделать, это написать новый файл (который содержит части из старого и новые части), а затем переименовать старый файл (например, добавить .bak расширение к нему, после удаления любого старого .bak который мог остаться без дела), переименуйте новый файл в старое имя и только в этот момент удалите старый файл. Такой подход гарантирует, что сбой компьютера или диска в середине вашей работы не будет катастрофой - старые или новые данные будут рядом (в худшем случае вам понадобится переименовать, если сбой происходит только между двумя переименовывает).

Чтобы написать новый файл, с модами и партиями из старого, в xmlfile, используйте описанную здесь функциональность читателя и описанную здесь функциональность писателя. Для небольшого файла вы можете сначала построить дерево объектов в памяти через считыватель, а затем записать все это через записывающее устройство; но это может занять много памяти. Альтернативой является метод инкрементного синтаксического анализа, такой как тот, который документы MSDN называют "модель программирования по запросу".

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