4

好吧,如果我想为应用程序机器范围存储数据,我只是使用

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

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

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

但是,如果我想为每个应用程序实例保存数据怎么办?我可以使用存储应用程序的文件夹,但如果我理解正确的话,“程序文件”文件夹不是用于这种类型的数据存储的......

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

4

4 回答 4

2

我不知道有任何其他应用程序可以做到这一点。

例如,如果我运行两个 Visual Studio 副本,我希望最后一个关闭实例的设置是持久的。

如果您为实例分配唯一 ID (GUID),您如何在下次运行应用程序时重用该值?或者您想在每次运行应用程序时获取一组新值?

如果您想重用,您可以创建编号的子目录(1、2、3、4 等),并且每次运行应用程序时都会将锁定文件写入该目录。然后检查锁定文件的存在并增加数字,直到找到未锁定的文件夹。

更新

根据添加的评论 - 为什么不获取可执行文件的路径并在其下创建一个文件夹?

如果用户无权访问该文件夹,则必须在位置和 GUID(例如)之间创建某种映射,然后将其附加到应用程序设置和用户设置路径。

于 2009-06-02T10:49:43.740 回答
1

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

于 2009-06-02T10:48:30.480 回答
0

一种可能性是在程序第一次运行时生成一个唯一的 id 并将其存储在特定于程序的某个位置(可能是本地配置文件)。

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

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

或者

System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "\" + uniqueid);
于 2009-06-02T11:37:33.050 回答
0

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

于 2009-06-02T10:58:12.130 回答