正确使用windows用户配置文件目录

正确使用windows用户配置文件目录,windows,mfc,home-directory,Windows,Mfc,Home Directory,我需要在windows用户“主”目录中创建一个目录(c:\Documents and Settings\someusername\或c:\users\someusername\)。此目录将永久存在,但仅包含临时文件 如果我想成为一个好公民,这个目录在用户配置文件中的最佳位置是什么?我应该注意,我的程序将由(可能的)非管理员用户运行,只需要访问他们自己的配置文件,但他们必须有创建文件夹的权限 我想使用mydocuments\NameOfMyApp\是可能的,但这似乎有侵入性 这类数据是否有更好的位

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

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

我想使用
mydocuments\NameOfMyApp\
是可能的,但这似乎有侵入性


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

请查看以下win32调用:

您可能希望使用GetUserProfileDirectory并将数据与appname一起放入子目录中


您肯定会想使用该功能,因为vista及更高版本上没有“\documents and settings”文件夹,他们将其更改为“\user”CSIDL_APPDATA;(或者有很多替代方案——几乎每个版本的Windows都会添加新的替代品,或者(通常)两者兼而有之)。

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

环境变量USERPROFILE将提供您猜到的用户配置文件路径。 临时路径提供用户的单个临时目录的路径

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

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

-瓦尔多


另外,谢谢你问这个问题。我从太多的应用程序中看到不良行为。C:驱动器的根不是你应该转储东西的地方!至少,(测试是否存在,如果需要创建,并且)使用C:\TEMP.

,您也要考虑这个数据是否应该“漫游”或是本地的机器。MSDN()似乎表明不应该使用CSIDL值来进行新的开发,但是,我必须支持的客户端可以追溯到Windows 2000,也可以追溯到Windows 7。Wr.<代码> CsIDLIAppDATABO/<代码>在Windows 7上工作吗?@ HeldCurryTy:您可以考虑<代码> SHIGTFLUDLINKING/<代码>(用WIN2K是新的,虽然它仍然使用CSIDL)。快速检查显示
SHGetSpecialFolderLocation(CSIDL_APPDATA)
似乎在Win7.IMO上仍然有效,这几乎需要进行下一票。例如,在Vista或更高版本上,通常不会有
[drive:\dcomuments and Settings
。USERPROFILEPATH更好,但仍然远不理想(因为它的使用可以编辑、删除等环境变量,所以很容易出错)。好吧,这是公平的。但是在XP及更低版本上(粗略猜测~=60%的企业桌面),它是适用的。如果我有Vista或Win7机器,我会包含新的答案。我会编辑我的评论,建议使用环境变量,而不是硬编码路径。