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

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

如果我想存储我使用的每个用户的数据

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

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

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

有帮助吗?

解决方案

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

例如,如果我运行 Visual Studio 的两个副本,我希望最后关闭的实例的设置将保留下来。

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

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

更新

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

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

其他提示

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

如果你需要这样做创建任何用户数据文件夹或计算机数据文件夹下的一个实例文件夹。您的应用程序可以删除在退出任何未想要的数据。虽然@ChrisF是右大约最通常的行为。

一种可能性是生成唯一ID的第一次程序运行和它存储在某处特定于程序(可能是一个本地配置文件)。

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

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

System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "\" + uniqueid);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top