我是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版本。

10-04 11:54