gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:41:16 25 4
gpt4 key购买 nike

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

我想知道你们是否知道存储用户输入的在本地数据存储中的方法。对于这种情况,您可能认为 10 条记录的数据量很大。

要求

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

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

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

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

我的想法

  1. 将被 XML 序列化并保存到“本地设置”文件夹的 POCO 对象。加载应用后,此文件将反序列化回 POCO 对象。

  2. OODBMS:我没有这方面的经验,但我一直认为它们由单个 dll 组成,因此很容易将它们与程序打包在一起。

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

关于c# - 用于保存用户设置的小型简单本地数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4400192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com