Как сохранить файл XML перед обновлением? - PullRequest
1 голос
/ 11 марта 2010

Точно, у меня есть простое приложение, которое состоит из календаря, кнопки «Установить событие» и списка, который заполняется с помощью DataTemplate в WPF.Когда я создаю приложение, файл Events.xml выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
    <events>

    </events>

Я добавляю события в xml с помощью кода.Окончательная структура XML-файла выглядит следующим образом

<?xml version="1.0" encoding="utf-8" ?>
<events>
   <event Name="Some Name">
       <startDate>20.03.2010</startDate>
       <endDate>29.03.2010</endDate>
   </event>
</event>

Теперь вот моя проблема.Если я обновлю приложение и разверну его с помощью Click Once, а приложение обновит его самостоятельно, я потеряю список, потому что новый файл пуст.Любой способ обойти это?

Вот как я могу добавить данные:

var xDocument = XDocument.Load(@"Data\Events.xml");
xDocument.Root.Add(new XElement("event", new XAttribute("name", event.Name),
                new XElement("startDate", startDate),
                new XElement("endDate", endDate)
                )
                );
xDocument.Save(@"Data\Events.xml");

Ответы [ 2 ]

0 голосов
/ 12 марта 2010

Я разобрался со своей проблемой.

Вот мой метод. Создайте папку @C:\Program Files\<MyApp>\Data\, добавьте туда файл Events.xml, когда приложение запускается в первый раз, и у меня там всегда есть файл.

Единственный недостаток - пользователь должен удалить папку вручную при удалении.

Click Once не устанавливает приложение @C:\Program Files\<MyApp>\ по умолчанию. Устанавливается на @C:\Users\<Username>\AppData\Local\Apps\2.0\ (под Windows 7).

Есть ли обходной путь?

0 голосов
/ 12 марта 2010

Если это вариант, я бы посоветовал вам не включать Events.xml как часть проекта. Если бы вы сделали это, вы могли бы:

  1. Перед загрузкой проверьте, есть ли оно.
  2. Если его там нет, запишите пустой.

Если Events.xml не является частью проекта, Click Once не будет перезаписывать его при обновлениях.

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