.NET Windows Store 数据

4

如果我想要为一个应用程序在整个机器上存储数据,我只需要使用

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

如果我想为每个用户存储数据,我会使用

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

但是如果我想要针对每个应用程序实例保存数据,该怎么办?我可以使用存储应用程序的文件夹,但是如果我理解正确,"程序文件"文件夹不适合这种类型的数据存储...

编辑:为了澄清我的意思,如果我在不同的文件夹中安装应用程序2次...而不是运行实例。


“instance” 是指命名实例吗?您是否想要重复使用这些实例的数据,还是您要存储的数据仅为临时数据? - crauscher
为了澄清我的意思,如果我在不同的文件夹中安装该应用程序两次...而不是同时运行的实例。 - Peter
4个回答

2
我不知道有哪个其他应用程序可以做到这一点。
例如,如果我运行两个Visual Studio实例,则期望关闭的最后一个实例的设置将持久保存。
如果您为实例分配唯一标识符(GUID),下次运行应用程序时如何重用该值?或者您希望每次运行应用程序都获得新的值集?
如果要重用,您可以创建编号的子目录(1、2、3、4等),并在每次运行应用程序时将锁定文件写入该目录。然后检查锁定文件的存在并递增数字,直到找到一个未锁定的文件夹。
更新:
考虑到添加的评论-为什么不获取可执行文件的路径并在其下创建一个文件夹?
如果用户没有该文件夹的权限,则必须在位置和GUID之间创建某种映射(例如),然后将其附加到应用程序设置和用户设置路径。

1
为什么不将数据存储在临时目录Path.GetTempPath中?您可以为您的应用程序使用一个子文件夹,另一个子文件夹(也许使用Guid作为名称会更有用)用于您的实例。我建议实现一些管理器类来实现IDisposable,以便在应用程序关闭时删除实例路径。

0

一个可能的方法是在程序第一次运行时生成一个唯一的ID,并将其存储在特定于该程序的位置(例如本地配置文件)。

然后,当您想要访问该应用程序的特定副本的文件时,只需使用

System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "\" + uniqueid);

或者

System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "\" + uniqueid);

这将导致完全相同的问题,即如何存储uniqueid?当然可以使用配置文件,但如果配置文件存储在与应用程序相同的文件夹中,则程序不应编辑其自己的配置文件。 - Peter
这是安装特定的设置,用户永远不需要更改它,因此程序可以设置它。事实上,如果您不想编辑app.config文件,则可以在安装目录中创建一个单独的文本文件并将其存储在那里。从我的角度来看,这似乎是最简单的解决方案。 - Dan Fuller
或者将应用程序安装路径进行哈希或其他编码,并使用该值作为您的唯一标识符。这假设用户永远不会移动应用程序,并且将始终将将来的版本安装到相同的路径中。 - Dan Fuller

0
如果需要,请在用户数据文件夹或机器数据文件夹下创建一个实例文件夹。您的应用程序可以在退出时删除任何不需要的数据。尽管@ChrisF对于大多数常见行为是正确的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接