用于保持用户设置的小型简单本地数据存储

时间:2010-12-09 15:54:21

标签: c# datastore

我有这个微小的C#winforms应用程序,它不会以任何方式变大。 它只是两个输入字段和一个按钮。

我想知道您是否了解存储用户在本地数据存储中输入 的方法。您可以将10条记录视为此方案的大量数据。

要求

  1. 它不需要从数据库端进行任何设置。 (表格创建等)

  2. 我应该能够给它一个对象,它应该存储它,我不想浪费时间。

  3. 数据需要相当容易检索。

  4. 我希望能够为我创建的每个小应用程序重用这个东西。

  5. 我的想法

    1. 将被XML序列化并保存到Local Settings文件夹的POCO对象。加载应用程序后,此文件将反序列化回POCO对象。

    2. OODBMS:我对这些没有经验,但我一直认为它们只包含一个dll,因此很容易将它们与程序打包在一起。

    3. 很久很久以前,我曾经构建了一个在注册表中存储用户设置的应用程序。不知道是否仍然欣赏它。

    4. 您认为最佳方法是什么?

      非常感谢代码示例!

3 个答案:

答案 0 :(得分:3)

我已经考虑了两个答案并构建了以下内容:

public static class IsolatedStorageExtensions
{
    public static void SaveObject(this IsolatedStorage isoStorage, object obj, string fileName)
    {
        IsolatedStorageFileStream writeStream = new IsolatedStorageFileStream(fileName, FileMode.Create);
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(writeStream, obj);
        writeStream.Flush();
        writeStream.Close();
    }

    public static T LoadObject<T>(this IsolatedStorage isoStorage, string fileName)
    {
        IsolatedStorageFileStream readStream = new IsolatedStorageFileStream(fileName, FileMode.Open);
        BinaryFormatter formatter = new BinaryFormatter();
        T readData = (T)formatter.Deserialize(readStream);
        readStream.Flush();
        readStream.Close();

        return readData;
    }
}

包装器POCO对象,其中包含要序列化的数据:

[Serializable]
internal class DataStoreContainer
{
    public DataStoreContainer()
    {
        UserIDs = new List<int>();
    }

    public List<int> UserIDs { get; set; }
}

要使用这些扩展程序:

private IsolatedStorageFile _isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
private DataStoreContainer _data = new DataStoreContainer();
private const string FILENAME = "MyAppName.dat";

在任何想要获取数据的方法中:

_data = _isoStore.LoadObject<DataStoreContainer>(FILENAME);

保存数据:

_isoStore.SaveObject(_data, FILENAME);

答案 1 :(得分:2)

你看过Isolated Storage了吗?它将数据存储在本地文件中,特定于该用户(或应用程序,具体取决于您的指定方式)。您可以轻松地将对象序列化到商店或从商店中进行序列化,因为它是基于流的。这听起来像是解决问题的完美解决方案。

答案 2 :(得分:1)

由于您声明10项将会很多我会投票#1或#1的变体,二进制序列化......您似乎并不表示能够读取数据很重要且二进制数据应该给你较小的文件大小,但如果10很多,这仍然不重要。

话虽如此,我喜欢我见过的db4objects。