我一直在使用 ApplicationDeployment.CurrentDeployment.DataDirectory
来存储客户端在运行时下载的内容,预计每次应用程序启动时都会存在,但是现在我发现这种变化似乎是随机的如果应用程序已更新。
在单击一次部署中为应用程序存储用户数据的最佳可靠方法是什么?
目前我一直在用下面的方法
private const string LocalPath = "data";
public string GetStoragePath() {
string dir;
if (ApplicationDeployment.IsNetworkDeployed) {
ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
dir = Path.Combine(ad.DataDirectory, LocalPath);
} else {
dir = LocalPath;
}
return CreateDirectory(dir);
}
我本来关注文章Accessing Local and Remote Data in ClickOnce Applications在 ClickOnce 数据目录
标题下,其中说明这是推荐的路径。
注意:如果目录不存在,CreateDirectory(string)
只是创建一个目录。
我发现我的问题的根本原因是我正在创建许多文件和一个索引文件,这个索引文件包含绝对路径,单击一次会在升级时移动内容(或副本),所以绝对路径没有不再存在。我将按照 Damokles 的建议研究隔离存储,看看这是否对单击一次部署有相同的副作用。
最佳答案
另一种选择是在用户的 AppData 文件夹中为您的应用程序创建一个目录并将其存储在那里。你可以通过这个获得路径:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
您会发现很多应用程序都使用它(并且它是本地等效项)。它也不会在 ClickOnce 版本之间移动。
关于c# - 在哪里可以安全地存储 ClickOnce 部署的数据文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6760565/