gpt4 book ai didi

c++ - 如何在代码中正确使用 %USERPROFILE%?

转载 作者:可可西里 更新时间:2023-11-01 09:40:57 28 4
gpt4 key购买 nike

我的代码正确吗?似乎可以编译但不能正常工作..

CString testing = _T(" --url=") + cstring + _T(" --out=%USERPROFILE%\\snapshot.png");

我想将它指向用户的文件夹..但仍然无法工作。

最佳答案

答案是您根本不使用环境变量。相反,您使用专门设计的 shell 函数来检索特殊文件夹的路径。

在 Windows Vista 及更高版本中,该函数为 SHGetKnownFolderPath .需要 KNOWNFOLDERID values确定您要检索其路径的文件夹。在您的情况下,这将是 FOLDERID_Profile

如果您需要针对早期版本的 Windows(例如 XP),则需要使用 SHGetSpecialFolderPath function , 反而。它需要一个 CSIDL值标识您要检索其路径的文件夹。同样,在您的情况下,这将是 CSIDL_PROFILE


当然,您永远不应将数据直接存储在用户的个人资料文件夹中。所以希望您展示的代码仅用于演示目的。应用程序应仅在用户配置文件文件夹下的特定位置创建文件,专为应用程序数据存储而设计。

这些位置是 CSIDL_APPDATACSIDL_LOCAL_APPDATA。如果您正在创建用户应该能够修改并且应该视为他/她自己的数据,那么将该数据存储在用户的文档文件夹 (CSIDL_MYDOCUMENTS) 中是合适的。

有关更多使用信息,请参阅 my answer here .


示例代码:

TCHAR szFolderPath[MAX_PATH];
if (!SHGetSpecialFolderPath(NULL, szFolderPath, CSIDL_APPDATA, FALSE))
{
// Uh-oh! An error occurred; handle it.
}

或者,使用 MFC 的 CString 类:

CString buffer;
BOOL bRet = SHGetSpecialFolderPath(NULL, buffer.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
buffer.ReleaseBuffer();
if (!bRet)
{
// Uh-oh! An error occurred; handle it.
}

关于c++ - 如何在代码中正确使用 %USERPROFILE%?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6827496/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com