如何使用isolatedstoragefile将多组数据写入文件

时间:2012-12-29 12:40:55

标签: windows-phone-7 windows-phone-7.1 windows-phone-8 isolatedstoragefile

我的Windows手机应用程序中有一个列表框,其datatemplate中有4个文本框控件来表示问题,答案,日期和电子邮件。

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

在阅读每条记录时,我如何以不同方式阅读每一栏(问题,答案,日期和电子邮件)?我知道我们可以在阅读每一行的同时编写和拆分它们来连接它们。但我想知道在IsolatedstorageFile api中是否提供了一种方法来读取我想要的方式。

2 个答案:

答案 0 :(得分:0)

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

我不是二进制或XML序列化的忠实粉丝,因此我将用分号分隔4个字段,并在新行上写下每个项目(question; answer; date; emailid)。将生成的字符串保存到文件中。

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

答案 1 :(得分:0)

我使用http://whydoidoit.com/中的Silverlight Serializer,只是将对象序列化为独立存储。它是一个非常好的序列化器 - 它的速度快,文件小。用于保存和检索的代码是

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 Serializer,这很简单。