【问题标题】:Environment.SpecialFolder.ApplicationData returns the wrong folderEnvironment.SpecialFolder.ApplicationData 返回错误的文件夹
【发布时间】:2013-06-05 15:19:44
【问题描述】:

我有一个奇怪的问题:我的 .NET 4.0 WPF 应用程序正在将数据保存到 ApplicationData 文件夹。

 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\myProgram\\";

99.9% 的案例运行良好,但在某些计算机上返回错误的文件夹 - 而不是返回用户文件夹,而是返回另一个文件夹:

C:\Users\<user>\AppData\Roaming\myProgram\  --correct
C:\Users\s\AppData\Roaming\myProgram\       --wrong

错误的文件夹没有写入/读取权限,所以我的程序无法运行。

似乎程序在不同的用户下运行,但如果我检查任务管理器,用户就是登录的用户。

这个问题似乎出现在权限很少的域用户身上。

【问题讨论】:

  • 你的应用是网络应用吗?
  • 不,它是一个 wpf 应用程序,框架 4.0
  • 对不起,我很迂腐,但是使用 Path.Combine!
  • 查看这个答案:stackoverflow.com/a/3953509/33690
  • 您不应该首先使用LocalApplicationData 吗?我的意思是,如果应用程序只安装在一台机器上,漫游数据的目的是什么?

标签: c# wpf windows


【解决方案1】:

创建一个文本文件来写吗?

如果是这样保存一个文件,例如:

String path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

var filePath = Path.Combine(path, "filetowrite.log"); // Handles whether there is a `\` or not.

if (File.Exists(filePath))
{
     ......................
}

注意在进行任何文件操作之前,应该检查目录是否存在。

【讨论】:

  • 始终使用 Path.Combine,从不使用“+”,因为您不知道路径是否以反斜杠结尾(或根本不使用反斜杠)。
猜你喜欢
  • 2012-03-14
  • 1970-01-01
  • 2018-10-25
  • 2019-09-30
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
相关资源
最近更新 更多