写入用户文档文件夹 C++
Posted
技术标签:
【中文标题】写入用户文档文件夹 C++【英文标题】:Writing to user documents folder C++ 【发布时间】:2009-08-12 20:56:29 【问题描述】:我正在尝试将一些信息写入用户的文档文件夹(例如 C:\Documents and Settings\[userName]),但我似乎不知道如何以编程方式获取路径。有没有办法做到这一点? C++,不使用 .NET。
谢谢!
【问题讨论】:
【参考方案1】:SHGetFolderPath 和 CSIDL_PERSONAL 可用于获取用户的 Documents 文件夹。
WCHAR path[MAX_PATH];
HRESULT hr = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL,
SHGFP_TYPE_CURRENT, path);
【讨论】:
文档暗示您应该使用 CSIDL_PERSONAL 而不是 CSIDL_MYDOCUMENTS。 文档链接 :) technet.microsoft.com/en-us/library/cc749104(WS.10).aspx CSIDL_PERSONAL 和 CSIDL_MYDOCUMENTS 是同义词。 . .但是,是的,我更喜欢 CSIDL_PERSONAL 的内涵。 嗯,从我阅读的文档来看,它没有任何意义。事实上,我会说这意味着 CSIDL_MYDOCUMENTS 是更好的选择,因为它不适用于旧系统,因此不会做意想不到的事情。 #define CSIDL_MYDOCUMENTS CSIDL_PERSONAL // Personal 只是 My Documents 的一个愚蠢的名称,直接来自 ShlObj.h 本身。【参考方案2】:你可以这样做:
wchar_t *pUSERPROFILE;
size_t len;
_wdupenv_s( &pUSERPROFILE, &len, L"USERPROFILE" );
wstring userprofile = pUSERPROFILE;
free (pUSERPROFILE);
_wdupenv_s MSDN
【讨论】:
你想要 _wgetenv;这是内存泄漏。很好的例子,微软的“安全”扩展实际上会适得其反。 至于 _wgetenv :“通过分配缓冲区本身,_dupenv_s 提供了一个比 getenv_s 更方便的替代方案,_wgetenv_s。”以上是关于写入用户文档文件夹 C++的主要内容,如果未能解决你的问题,请参考以下文章
在使用VB的RichTextBox控件时加载文档(RTF)出现错误,应用程序出错,不能写入。