我是Windows开发的新手(在Mac方面经验丰富),并且正尝试使用SHGetFolderPath(因为它与Windows XP兼容)来获取当前用户的应用程序数据文件夹的路径。但是,无论传入什么标志,每次都得到“C”的输出路径。我都尝试了两种方法:
CSIDL_APPDATA
和
CSIDL_LOCAL_APPDATA
具有和不具有CSIDL_FLAG_CREATE标志。每次相同的结果:“C”。我在这里做错了什么?
#include <windows.h>
#include <shlobj.h> // SHGetFolderPath
#include <stdio.h>
#include <stdlib.h>
//#pragma comment(lib, "shell32.lib")
int main()
{
CHAR path[MAX_PATH];
HRESULT result = SHGetFolderPath(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, path);
if (result != S_OK)
printf("Error: %d\n", result);
else
printf("Path: %s\n" , path);
printf( "String length: %d\n", strlen(path) );
return 0;
}
SHGetFolderPath的文档:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181(v=vs.85).aspx
最佳答案
您正在为Unicode进行编译,但要传递ANSI缓冲区。您的实际代码中有一个强制转换,您没有显示给我们。要么传递wchar_t缓冲区并使用匹配的打印例程,要么调用函数SHGetFolderPathA的ANSI版本。