silverlight, Сохранить загрузку, IsolatedStorageFile и IsolatedStorageFileStream. Исключения - PullRequest
2 голосов
/ 20 ноября 2010

Приложение для Windows Phone 7 Цель приложения - простой список дел.У меня есть класс 'toditem', я добавляю эти объекты к объекту Items.

мне кажется, я делаю что-то действительно сложное и, скорее всего, не чистый или порядочный код

Но у меня естьнекоторые серьезные проблемы с «IsolatedStorageFile»

 public class ToDoItem
    {
        public string ToDoName { get; set; } // Add controle's enz.
        public string ToDoDescription { get; set; }
        internal Priority PriortiySelection { get; set; }
...
}

Класс Items (в основном это класс-оболочка, чтобы я мог получить к нему доступ)

public class Items
    {
        public static List<ToDoItem> Itemslist = new List<ToDoItem>();
        public static List<ToDoItem> GetList()

        static methods here..
   }

Код Below возвращает следующие исключения:

"Попытка доступа к методу не удалась: System.Io.streamreader..ctor (System.String)"

и после этого я получаю

Операция запрещена для IsolatedStorageFileSTream

  if (store.FileExists(@"items.std"))
                {

                    ToDoItem item = new ToDoItem();
                    try
                    {
                        IsolatedStorageFileStream save = new IsolatedStorageFileStream(@"items.std", FileMode.Open, store);
                        BinaryReader reader = new BinaryReader(save);
                    }
                    catch (Exception exc)
                    {
                        MessageBox.Show(exc.Message);
                    }

в общедоступном частичном классе NewToDo: PhoneApplicationPage. Я добавил следующий метод.который возвращает вышеупомянутые исключения снова, я только предполагаю, что это разрешено по какой-то причине, или я делаю огромные ошибки.

 private void saveItem(ToDoItem toDoItem)
        {
            try
            {
                using (StreamWriter sw = new StreamWriter(store.OpenFile(@"items.std", FileMode.Append)))
                {
                    sw.WriteLine(toDoItem.ToDoName);
                    sw.WriteLine(toDoItem.ToDoDescription);
                    sw.WriteLine(toDoItem.PriortiySelection.ToString());
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }

        }

Если вам нужна дополнительная информация, я всегда рад предоставить ее, я в настоящее времястудент второго курса бельгийского колледжа, а я играю с приложениями для windows phone7.

Ответы [ 2 ]

1 голос
/ 20 ноября 2010

Возможно ли, что вы не утилизируете все свои одноразовые объекты и не столкнулись с проблемой, когда пытаетесь получить доступ к ресурсу во второй раз, потому что он все еще используется?

Использование оператора - хороший способсправиться с этим легко, подробнее об этом здесь.

Утилизация с использованием

Немного больше информации по теме здесь, где Jm47 получал такое же сообщение об ошибке по этой причине.

Не удается открыть поток для изображения изолированного хранилища, уже являющегося источником изображения?

1 голос
/ 20 ноября 2010

Следующее будет считывать содержимое файла из изолированного хранилища

using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
    if (!store.FileExists(VIEW_MODEL_STORAGE_FILE))
    {
        return result;
    }

    using (var isfs = new IsolatedStorageFileStream(VIEW_MODEL_STORAGE_FILE, FileMode.Open, store))
    {
        using (var sr = new StreamReader(isfs))
        {
            string lineOfData;

            while ((lineOfData = sr.ReadLine()) != null)
            {
                result += lineOfData;
            }
        }
    }
}

В примере строится строка данных (result). Это на самом деле сериализованный объект, который на самом деле является набором других объектов. Затем его можно десериализовать обратно в коллекцию. Это, вероятно, предпочтительнее того, что вы пытались сделать, записывая свойства в файл по одному.

Вот как записать файл:

using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
    using (var isfs = new IsolatedStorageFileStream(VIEW_MODEL_STORAGE_FILE, FileMode.Create, store))
    {
        using (var sw = new StreamWriter(isfs))
        {
            sw.Write(serializedCollectionObject);
            sw.Close();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...