Запись в файл XML с xmllite? - PullRequest
       19

Запись в файл XML с xmllite?

0 голосов
/ 15 ноября 2009

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

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

1 Ответ

0 голосов
/ 15 ноября 2009

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

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

...