【问题标题】:C# How to get the User AppData folder, NOT AppData\Roaming?C# 如何获取用户 AppData 文件夹,而不是 AppData\Roaming?
【发布时间】:2021-03-05 05:15:41
【问题描述】:

我使用下面的代码来获取用户的AppData 文件夹-

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

但我得到的是"C:\Users\(users)\AppData\Roaming"。有没有办法只得到"C:\Users\(users)\AppData"

【问题讨论】:

  • 您能否描述一下您为什么需要此信息?我不确定是否可以保证 Roaming、Local 和 LocalLow 文件夹始终是同级文件夹。
  • C:\Users(users)\AppData\LocalLow 下安装了一个应用程序,我想为它创建一个更新应用程序。
  • 您应该在问题中包含此信息。答案已经在 StackOverflow 上:Detect the location of AppData\LocalLow
  • 我之前已经检查过了。由于答案太复杂,我放弃了使用 LocalLow 目录。我认为将“LocalLow”字符串附加到 AppData 很容易。
  • 对于您的下一个问题,请分享您已经研究过的内容以及为什么结果不适合您。这可以节省那些想帮助你的人重复你已经做过的事情的时间。而且“太复杂”:我会立即选择稍微复杂但正确的解决方案,而不是可能在 99% 的情况下有效但在 1% 的情况下失败的解决方案。

标签: c# appdata


【解决方案1】:

首先,除非 Microsoft 已发布 API 来检索其位置,否则直接访问该文件夹可能不是一个好主意。这意味着无法保证此文件夹甚至会存在。

如果您出于某种原因真的想检索此文件夹,您可能可以按照以下方式进行操作

Directory.GetParent(
    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))

然后进行验证,您还可以检索例如

Directory.GetParent(
    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData))

如果两者相同,很可能就是你要查找的文件夹。

但同样,首先质疑为什么需要这条路径的动机可能是个好主意。

【讨论】:

    【解决方案2】:

    这就是你要找的东西

    首先从 Environment 对象中获取用户名。

    string userName = Environment.UserName;

    然后,使用该用户名生成路径。

    string path = $"C:\\Users\\{userName}\\AppData";

    【讨论】:

    • 这样会导致很多情况下不存在的路径
    • 你的意思是如果我们在Linux上执行这段代码,因为“路径”字符串是根据windows目录模式构造的。
    • 它可能不在C盘,它可能不在C:\Users下,它可能与用户名不同。仅仅因为它在您的机器上并不意味着它在其他地方就完全一样。
    猜你喜欢
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2023-02-16
    • 1970-01-01
    • 2012-03-01
    相关资源
    最近更新 更多