【问题标题】:Proper usage of the windows user profile directorywindows用户配置文件目录的正确使用
【发布时间】:2010-08-24 19:34:04
【问题描述】:

我需要在 Windows 用户的“主”目录(c:\Documents and Settings\someusername\c:\users\someusername\)中创建一个目录。该目录将永久存在,但仅包含临时文件。

如果我想成为一个好公民,这个目录在用户个人资料中的最佳位置是什么?我应该注意,我的程序将由(可能)非管理员用户运行,并且只需要访问他们自己的个人资料,但他们必须有权创建文件夹。

我猜可以使用My Documents\NameOfMyApp\,但这似乎很麻烦。

这种类型的数据是否有更好的位置,以及访问它的特定 MFC 调用?

【问题讨论】:

    标签: windows mfc home-directory


    【解决方案1】:

    我会考虑使用 AppData 目录。您可以通过SHGetSpecialFolderLocation 传递它CSIDL_APPDATA 来获取它的位置; (或许多替代方案 - 几乎每个版本的 Windows 都为SHGetSpecialFolderLocationSHGetSpecialFolderPath 或(通常)两者都添加了一个新替代方案)。

    【讨论】:

    • 您还需要考虑这些数据是应该“漫游”还是位于机器本地。
    • MSDN (msdn.microsoft.com/en-us/library/bb762494%28VS.85%29.aspx) 似乎表明不应将 CSIDL 值用于新开发,但是我必须支持早至 Windows 2000 和直到 Windows 7 的客户端。将CSIDL_APPDATA 在 Windows 7 上工作?
    • @theycallmemorty:您可能会考虑使用ShGetFolderLocation(Win2K 中的新功能,尽管它仍然使用 CSIDL)。快速检查显示SHGetSpecialFolderLocation(CSIDL_APPDATA) 似乎仍然可以在 Win7 上运行。
    【解决方案2】:

    看看下面的 win32 调用:

    您可能希望使用 GetUserProfileDirectory 并将您的数据与您的应用名称放在一个子目录中。

    您肯定会想要使用该功能,因为在 vista 及更高版本上没有“\documents and settings”文件夹,他们将其更改为“\user”。

    【讨论】:

      【解决方案3】:

      作为一名优秀的应用程序公民,您应该使用: [驱动器]:\Documents and Settings[用户名]\Application Data[AppName] 或 [驱动器]:\Documents and Settings[用户名]\Local Settings\Application Data[AppName] (在 Vista 和 Win7 上,“文档和设置”被替换,最明智的是“用户”)

      环境变量 USERPROFILE 将提供,您猜对了,用户配置文件路径。 TEMP 路径提供了用户个人临时目录的路径

      如果临时文件不是用户特定的,您可以使用 C:\temp

      编辑:如果您要使用用户特定的位置,我强烈建议您使用环境变量(XP 和 2000 上的 USERPATH)而不是硬编码路径。

      -沃尔多

      附:谢谢你问这个。我看到 Waaaay 太多应用程序的不良行为。 C:驱动器的根目录不是你应该倾倒东西的地方!至少,(测试是否存在,必要时创建,并)使用 C:\Temp。

      【讨论】:

      • 国际海事组织,这几乎需要投反对票。例如,在 Vista 或更新版本上,通常不会有 [drive:\Dcouments and Settings。 USERPROFILEPATH 更好,但仍远非理想(太容易搞砸了,因为用户可以编辑、删除等环境变量)。
      • 好的,这很公平。但是在 XP 和更低版本(粗略猜测 ~= 60% 的企业桌面)上,它是适用的。如果我有一台 Vista 或 Win7 机器,我会包含新的答案。我将编辑我的评论以推荐使用环境变量而不是硬编码路径。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2017-02-24
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-05
      相关资源
      最近更新 更多