在C++中写入用户文档文件夹

6
我想将一些信息写入用户文档文件夹(例如C:\ Documents and Settings \ [userName]),但我似乎找不到以编程方式获取路径的方法。 是否有任何方法可以做到这一点?使用C ++,而不是使用.NET。

谢谢!

2个回答

16

SHGetFolderPath 与 CSIDL_PERSONAL一起使用可以获取用户的文档文件夹。

WCHAR path[MAX_PATH];
HRESULT hr = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL,
                             SHGFP_TYPE_CURRENT, path);

1
请参阅文档链接:http://technet.microsoft.com/zh-cn/library/cc749104(WS.10).aspx - Charles Ma
从我阅读的文档来看,并没有暗示任何这样的事情。事实上,我会说它意味着 CSIDL_MYDOCUMENTS 是更好的选择,因为它不适用于旧系统,因此不会出现意外情况。 - Goz
Win7 SDK中提到: CSIDL_PERSONAL(FOLDERID_Documents) 版本6.0。表示我的文档桌面项的虚拟文件夹。这相当于CSIDL_MYDOCUMENTS。 在版本6.0之前。用于物理存储用户文档的常见存储库的文件系统目录。典型路径为C:\ Documents and Settings \ username \ My Documents。这应与命名空间中的虚拟我的文档文件夹区分开来。要访问该虚拟文件夹,请使用SHGetFolderLocation,它返回虚拟位置的ITEMIDLIST,或者参考描述 - Michael
区别在桌面上更加明显,例如回收站这样的孩子是在虚拟文件夹中而不是物理文件夹中。 - MSalters
1
#define CSIDL_MYDOCUMENTS CSIDL_PERSONAL // “Personal”只是“My Documents”的一个愚蠢名称,这是来自ShlObj.h的原话。 - user131091
显示剩余3条评论

-2
你可以这样做:
wchar_t *pUSERPROFILE;
size_t len;
_wdupenv_s( &pUSERPROFILE, &len, L"USERPROFILE" );
wstring userprofile = pUSERPROFILE;
free (pUSERPROFILE);    

微软开发者网络 MSDN


你想要使用_wgetenv;这会导致内存泄漏。这是微软“安全”扩展实际上可能适得其反的一个很好的例子。 - MSalters
关于 _wgetenv:"_dupenv_s 通过分配缓冲区本身,提供了一个比 getenv_s、_wgetenv_s 更方便的选择。" - anno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接