如何使用C++在Windows中获取应用程序数据路径?

Bri*_*nan 26 c++ windows application-data

我浏览了整个互联网,似乎找不到一个像样的解决方案.我希望能够在C++中以编程方式获取探索器可以转换为真实路径的路径"%ALLUSERSPROFILE%\ Application Data".

我可以不依赖第三方代码吗?

int*_*jay 44

使用SHGetFolderPathCSIDL_COMMON_APPDATA作为CSIDL.

TCHAR szPath[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)))
{
    //....
}
Run Code Online (Sandbox Code Playgroud)

  • SHGetKnownFolderPath还有更新的,不一定更精简的.适用于Vista或更高版本. (5认同)
  • 我还想补充说CSIDL_APPDATA是用户特定的版本.(COMMON_APPDATA在所有用户之间共享) (3认同)

Dan*_*eld 18

只是为了补充interjay的答案

  1. 我不得不包括shlobj.h使用SHGetFolderPath.

  2. 通常你可能需要从appdata读取一个文件,为此你需要使用该pathAppend函数(这shlwapi.h是必需的).

#include <shlwapi.h>
#pragma comment(lib,"shlwapi.lib")
#include "shlobj.h"

TCHAR szPath[MAX_PATH];
// Get path for each computer, non-user specific and non-roaming data.
if ( SUCCEEDED( SHGetFolderPath( NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath ) ) )
{
    // Append product-specific path
    PathAppend( szPath, _T("\\My Company\\My Product\\1.0\\") );
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参见此处

  • 你应该使用 `TEXT()` 宏而不是 `_T()` 宏(或者,完全停止使用 `TCHAR` - 除非你真的需要支持 Win9x/ME)。Win32 API 使用`TEXT()`,C 运行时库使用`_T()`。 (2认同)