1

我的 Windows Phone 应用程序中有一个列表框,它的数据模板中有 4 个文本框控件来表示问题、答案、日期和电子邮件 ID。

当用户保存这些数据时,我想将它们保存到本地存储中,以便以后可以读取它以在应用程序中显示相同的数据。那么如何使用isolatedstoragefile将多组数据写入一个文件,每组数据的每一行都包含上述数据(问题、答案、日期和电子邮件)。

在阅读每条记录时,我如何以不同的方式阅读每一列(问题、答案、日期和电子邮件 ID)?我知道我们可以在写入时连接它们并在读取每一行时拆分它们。但我想知道隔离存储文件 api 中是否提供了一种方法来读取我上面想要的方式。

4

2 回答 2

0

就像使用“普通”文件一样。

我不是二进制或 XML 序列化的忠实粉丝,所以我会用分号分隔 4 个字段,并将每个项目(问题;答案;日期;电子邮件 ID)写在新行上。将生成的字符串保存到文件中。

然后在阅读时,将整个文件读入一个字符串,用换行符分割它,你会得到所有的项目。对于每一行(项目),使用分号将其拆分,您将获得 4 个字段,您可以将它们转换为所需的类型。

于 2012-12-29T12:47:31.320 回答
0

我使用来自http://whydoidoit.com/的 Silverlight 序列化程序,并将对象序列化到独立存储。它是一个非常好的序列化程序——速度快而且文件很小。用于保存和检索的代码是

public static void SaveFile(string filename, object serializableObject, Type type)
    {
        using (IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (userStore.FileExists(filename))
            {
                userStore.DeleteFile(filename);
            }

            using (IsolatedStorageFileStream stream = userStore.CreateFile(filename))
            {
                SilverlightSerializer.Serialize(serializableObject, stream);
            }
        }
    }

    public static object LoadSerializedObjectFromFile(string filename, Type type)
    {
        using (IsolatedStorageFile userStore =
          IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (userStore.FileExists(filename))
            {
                using (IsolatedStorageFileStream stream = userStore.OpenFile(filename, FileMode.Open))
                {
                    return SilverlightSerializer.Deserialize(stream);
                }
            }
        }
        return null;
    }

我通常将单个文件包装在存储库中(模式)。例如,在我的 Good Deal 应用程序中,我有一个 DealRepository。在该存储库中,我有一个静态 Load 方法,如下所示:

 private static IDeal LoadRecentDeal()
    {
        IDeal savedDeals = IsolatedStorageHelper.LoadSerializedObjectFromFile(RecentDealFileName, typeof(Deal)) as Deal;
        if (savedDeals != null)
        {
            return savedDeals;
        }
        else
        {
            return Deal.CreateNewDeal(RecentDealFileName);
        }
    }

内部保存方法是这样的:

public void Save(IDeal deal)
    {
        deal.LastModifiedDate = DateTime.Now;

        // 
        string fileName;
        if (deal.Name == RecentDealFileName)
        {
            fileName = RecentDealFileName;
        }
        else
        {
            fileName = SavedDirectoryName + Path.DirectorySeparatorChar + deal.ID.ToString();
        }

        IsolatedStorageHelper.SaveFile(fileName, deal, typeof(IDeal));       
    }

此外,IsolatedStorageHelper 和存储库上还有其他几种方法用于执行操作,例如保存多个文件中的列表并返回它们......等等。一切都取决于您的需求 - 但我建议您查看 Silverlight 序列化程序,它可以做到很简单。

于 2012-12-29T13:10:43.907 回答