我对Windows开发相当陌生(在Mac方面经验丰富),并试图使用SHGetFolderPath(因为它与Windows XP兼容)来获取当前用户的应用程序数据文件夹的path。 然而,无论我通过什么标志,我每次都会得到一个“C”的输出path。我已经尝试了两种:
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缓冲区并使用匹配的打印例程,或者调用函数的ANSI版本SHGetFolderPathA。
更改
CHAR path[MAX_PATH];
至
TCHAR path[MAX_PATH];
甚至更好
wchar_t path[MAX_PATH];
并使用wprintf()
和wcslen()
来代替printf()
和strlen()
。