无论什么,SHGetFolderPath都会返回“C”?

时间:2011-11-07 17:49:43

标签: c windows directory

我对Windows开发相当新(在Mac方面经验丰富),并且我正在尝试使用SHGetFolderPath(因为它与Windows XP兼容)来获取当前用户的app数据文件夹的路径。然而,无论我传递什么旗帜,我每次都会获得“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

2 个答案:

答案 0 :(得分:8)

您正在编译Unicode但传递ANSI缓冲区。您的实际代码有一个您没有向我们展示的演员表。传递wchar_t缓冲区并使用匹配的打印例程,或调用函数的ANSI版本SHGetFolderPathA。

答案 1 :(得分:0)

更改

CHAR path[MAX_PATH]; 

TCHAR path[MAX_PATH]; 

甚至更好

wchar_t path[MAX_PATH];

并使用wprintf()wcslen()代替printf()strlen()