我如何在C ++中获取appdata / local / <myprogramfolder> /路径

时间:2019-03-14 08:42:27

标签: c++ winapi

我使用fstream并使用getenv来获取appdata的路径。我使用了以下代码,但将其输出到appdata / roaming /

QString appdata = getenv("appdata");
appdata += "\\DoDLog.log";
fstream stud;
stud.open(appdata.toStdString().c_str(), ios::app);

我想发生的是appdata / local // DoDLog.log的路径

MyProgram是我一直在运行的c ++程序。请帮忙。

1 个答案:

答案 0 :(得分:0)

您需要使用SHGetSpecialFolderLocation

这是一个C解决方案,不难使其适应C ++,QStringstd::string或其他任何东西。

#include <shlobj.h>
...
HRESULT GetFolderLocation (int csidl, char* buffer)
{
  LPITEMIDLIST pidl = 0;      
  HRESULT result = SHGetSpecialFolderLocation(NULL, csidl, &pidl);      
  *buffer = 0 ;

  if (result == 0)
  {
      SHGetPathFromIDList(pidl, buffer);
      CoTaskMemFree(pidl);
  }

  return result;
}

...
char str[_MAX_PATH];
GetFolderLocation(CSIDL_LOCAL_APPDATA, str);
// now str contains "C:\Users\<user>\AppData\Local"
...