Загрузить XML в изолированном хранилище - PullRequest
1 голос
/ 10 августа 2011

Я использую следующий код для создания и загрузки XML в изолированном хранилище.В первой части он создает файл в изолированном хранилище, если он не существует, иначе он загружает уже созданный / загруженный в файл изолированного хранилища.Проблема в том, что когда он пытается загрузить файл, который он (успешно) создал / загрузил при первом вызове функции.Вот код

public void InitAch()
{
    using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
    {
        if (!storage.FileExists("Achievements.xml"))
        {
            using (Stream stream = storage.OpenFile("Achievements.xml", FileMode.Create, FileAccess.Write))
            {
                XDocument xml = XDocument.Load("Achievements.xml");
                xml.Save(stream,SaveOptions.None);
            }
        }
        else
        {
            using (Stream stream = storage.OpenFile("Achievements.xml", FileMode.Open, FileAccess.Read))
            {

                XDocument xml = XDocument.Load(stream,LoadOptions.None);
                Lexis.Page4.Achievements.sheep = Int32.Parse(xml.Root.Element("BlackSheep").Value);
                Lexis.Page4.Achievements.singularity = Int32.Parse(xml.Root.Element("Singularity").Value);
                Lexis.Page4.Achievements.luke = Int32.Parse(xml.Root.Element("LuckyLuke").Value);
                Lexis.Page4.Achievements.gardener = Int32.Parse(xml.Root.Element("Gardener").Value);
                Lexis.Page4.Achievements.dumbo = Int32.Parse(xml.Root.Element("Dumbo").Value);
                Lexis.Page4.Achievements.joker = Int32.Parse(xml.Root.Element("Joker").Value);
                Lexis.Page4.Achievements.maid = Int32.Parse(xml.Root.Element("Maid").Value);
                Lexis.Page4.Achievements.mr = Int32.Parse(xml.Root.Element("MrWords").Value);
                Lexis.Page4.Achievements.secret = Int32.Parse(xml.Root.Element("Detective").Value);

            }
        }
    }

Буду признателен за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 10 августа 2011
if (!storage.FileExists("Achievements.xml"))
    using (Stream stream = storage.OpenFile("Achievements.xml", FileMode.Create, FileAccess.Write))
    {
        XDocument xml = XDocument.Load("Achievements.xml");
        xml.Save(stream,SaveOptions.None);
    }

В этом коде:

  • Строка 1: файл не существует
  • Строка 2: Создать новый (пустой) файл
  • Строка4: Загрузить (пустой) файл - В данный момент файл пуст, ничего не загружено! Я предполагаю, что он выбрасывает либо из-за этого, либо из-за того, что не может разрешить имя в локальномхранилище - в любом случае эта строка неверна.
  • Строка 5: сохраняет (пустой?) XML-документ в файл

Вам нужно будет исправить создание XMLфайл.

0 голосов
/ 10 августа 2011

Зачем вам создавать пустой файл и сохранять его? Это кажется немного .. неправильно.

Что касается загрузки пустого файла, конечно, произойдет сбой с исключением, как только вы получите доступ к xml.Root.Element("BlackSheep").Value.

Этот элемент не будет существовать в пустом файле, поэтому Element("BlackSheep") вернет ноль. Хотя доступ к свойству .Value вызовет исключение.

Так что я не совсем уверен, какая помощь вам нужна, кроме:

  1. не создавайте пустой XML, так как нет смысла; и / или
  2. добавить код в ваше чтение, чтобы проверить, есть ли что-нибудь в файле.
...