silverlight,保存负载,IsolatedStorageFile和IsolatedStorageFileStream。例外

时间:2010-11-20 00:25:03

标签: c# silverlight silverlight-4.0 windows-phone-7

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; }
...
}

项目类(基本上是一个包装器,所以我可以访问它)

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

        static methods here..
   }

代码Belows返回以下例外情况:

  

“尝试访问该方法失败:   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 个答案:

答案 0 :(得分:1)

以下内容将从隔离存储中读取文件的内容

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();
        }
    }
}

答案 1 :(得分:1)

当您尝试再次访问资源时,您是否有可能不会丢弃所有可处理对象并遇到问题,因为它仍在使用中?

使用声明是一种很好的方法来处理这个问题,更多的是在这里。

Dispose with Using

关于这个主题的更多背景,其中Jm47因此而得到相同的错误消息。

Problem opening a stream to an isolatedstorage image already the source on an image?