Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用c+;获取%APPDATA%路径+;_C++_Visual C++ - Fatal编程技术网

C++ 使用c+;获取%APPDATA%路径+;

C++ 使用c+;获取%APPDATA%路径+;,c++,visual-c++,C++,Visual C++,我想获取%APPDATA%文件夹的路径 在win 2000和xp中,它位于:C:\Documents and Settings\user name\Application Data 在vista和win7中,它位于:C:\Users\user name\AppData\Roaming 我知道有函数,但它检索BOOL 我想以字符串的形式获取路径。的第三个参数,名为lpszPath,被标记为\uu out 这样做应该可以: // Beware, brain-compiled code ahead!

我想获取
%APPDATA%
文件夹的路径

在win 2000和xp中,它位于:
C:\Documents and Settings\user name\Application Data

在vista和win7中,它位于:
C:\Users\user name\AppData\Roaming

我知道有函数,但它检索BOOL 我想以字符串的形式获取路径。

的第三个参数,名为
lpszPath
,被标记为
\uu out

这样做应该可以:

// Beware, brain-compiled code ahead!
wchar_t buffer[MAX_PATH];
BOOL result = SHGetSpecialFolderPath( hWnd
                                    , buffer
                                    , CSIDL_LOCAL_APPDATA
                                    , false );
if(!result) throw "You'll need error handling here!";
std::wcout << buffer;
//当心,brain提前编译了代码!
wchar_t缓冲区[最大路径];
BOOL result=SHGetSpecialFolderPath(hWnd
缓冲器
,CSIDL_LOCAL_APPDATA
,假);
如果(!result)抛出“这里需要错误处理!”;

std::wcout使用这个cout会给出“002BFA00”@Tom:当您编译为Unicode时会发生这种情况;您需要
std::wcout
在那里。现在点击
TCHAR[MAX\u PATH]->
wchar\u t*`->
void*
转换,并打印堆栈缓冲区的地址。只要使用
MessageBox
,这就是一个例子。直截了当地说,谢谢你的MSalters。从java到C++的转换根本不容易。有没有关于将其转换为std::string的知识?@Tom:如果您编译为MBCS而不是Unicode,那么您可以直接从缓冲区构造一个std::string。如果你使用Unicode,那么你需要使用StrueFipe来执行转换。谢谢回复DIALMG,现在在我的C++参考书中阅读它。