如何以便携式形式在c#应用程序中存储数据?

时间:2010-02-16 21:30:00

标签: c# c#-3.0 object-persistence

我正在使用Windows窗体和c#3.0编写应用程序。我想知道是否有建议的方法来保持数据的跨时间。但是,我不想触摸它正在运行的机器,因此,我想将数据存储在二进制可执行文件中(最好,因为不需要用随机配置文件来混淆用户的文件夹)。

因此,如果有人对如何做到这一点有任何想法,那将非常感谢!

杰森

6 个答案:

答案 0 :(得分:10)

如果您要存储配置信息 - app.config或设置文件可能就是您的选择。

如果您要存储用户数据 - 您应该真正允许用户控制保存位置 - 并且更喜欢计算机上的\ User \ Username文件夹。

关于将它存储在中的格式......你当然可以使用像SQLLite这样的东西 - 但是如果你没有存储真正的二进制数据,XML也没有任何问题。 .NET offers a number of APIs将对象图转换为XML表示形式 - 您可能需要查看它。

如果您不想在本地用户的计算机上存储任何 ,您可能需要上传用户数据的网络数据库或网络服务。只需确保您的用户明白这一点 - 许多人不喜欢他们的私人数据未经他们同意就被发送到网络上。

您真的不想修改可执行文件。许多病毒扫描程序隔离内容或大小不断变化的可执行文件 - 作为主动防止病毒和恶意软件感染的方法机。你不想去那里。

答案 1 :(得分:4)

不要修改可执行文件。添加单个SQLite数据库是一个更好的解决方案。

答案 2 :(得分:2)

隔离存储是另一种选择。

  • 不会使安装目录混乱
  • 不会导致AnitVirus软件出现问题
  • 部分操作系统包括.Net对象,不需要安装任何其他内容
  • 已经可以使用Windows安全模型
  • 基于每个用户存在,因此为每个用户分隔保存的设置
  • 可以直接对其进行序列化/反序列化

答案 3 :(得分:0)

SQLite是您正在寻找的并且与c#

兼容

答案 4 :(得分:0)

如果您不想将数据存储在最终用户PC上的SQLite数据库中,您可以调用另一台服务器上的Web服务,该服务器将其数据存储在SQL Server或其他内容中。

答案 5 :(得分:0)

我不相信Windows窗体项目可以像这样修改自己(我曾经试图找到一种方法来自己做这个)。某种形式的托管应用程序,例如silverlight应用程序(其中应用程序本质上是一个zip文件)可能是要走的路。 Silverlight应用程序虽然需要silverlight插件(我仍然不确定是否允许Silverlight应用程序自行修改)。

我认为某种配置文件可能是优先的,并且不会留下太多混乱。

确保您的应用程序完全自包含的一种方法是在编译项目后使用ThinStall之类的程序。这会虚拟化应用程序,并可以在.exe文件内部为其提供自己的文件系统或注册表。

可执行文件自身更改的一种方法是在其中放入另一个可执行文件(嵌入为资源,然后在需要时将其提取到文件中)。然后,这个可执行文件可以修改第一个,但我不认为它有任何框架可以做到这一点,因此需要知道要改变什么以及在哪里。