使用与ShgetFolderPath的数组
Using an array with SHGetFolderPath
本文关键字:数组 ShgetFolderPath 更新时间:2023-10-16
我的代码是:
int copyme() {
TCHAR buf[MAX_PATH];
TCHAR szPath[MAX_PATH];
std::array<std::string, 16> locations = { "CSIDL_APPDATA","CSIDL_CDBURN_AREA","CSIDL_COMMON_APPDATA","CSIDL_COMMON_DESKTOPDIRECTORY","CSIDL_COMMON_DOCUMENTS","CSIDL_COMMON_MUSIC","CSIDL_COMMON_PICTURES","CSIDL_COMMON_PROGRAMS","CSIDL_COMMON_STARTMENU","CSIDL_COMMON_STARTUP","CSIDL_COMMON_TEMPLATES","CSIDL_COMMON_VIDEO","CSIDL_DESKTOPDIRECTORY","CSIDL_INTERNET_CACHE","CSIDL_LOCAL_APPDATA","CSIDL_PERSONAL", };
for (auto& location : locations) {
(SHGetFolderPath(NULL,
location | CSIDL_FLAG_CREATE,
NULL,
0,
szPath)
}
我试图从数组中调用SHGetFolderPath
,但根据文档:
nfolder [in]
类型:int
a csidl值,标识要检索路径的文件夹。只有实际文件夹是有效的。如果指定了虚拟文件夹,则此功能失败。您可以通过将文件夹的CSIDL与CSIDL_FLAG_CREATE组合来强制创建文件夹。
因此,只能使用int
。有什么想法我能做什么?
,因为SHGetFolderPath
文档明确指出,nFolder
参数是整数,而不是字符串。CSIDL
值是数字ID,而不是字符串(其可读的名称是#define
'D中的shlobj.h
)。
所以,只需将您的数组从std::string
更改为int
,然后删除CSIDL名称周围的引用字符:
int copyme()
{
TCHAR szPath[MAX_PATH];
std::array<int, 16> locations = {
CSIDL_APPDATA, CSIDL_CDBURN_AREA, CSIDL_COMMON_APPDATA, CSIDL_COMMON_DESKTOPDIRECTORY,
CSIDL_COMMON_DOCUMENTS, CSIDL_COMMON_MUSIC, CSIDL_COMMON_PICTURES, CSIDL_COMMON_PROGRAMS,
CSIDL_COMMON_STARTMENU, CSIDL_COMMON_STARTUP, CSIDL_COMMON_TEMPLATES, CSIDL_COMMON_VIDEO,
CSIDL_DESKTOPDIRECTORY, CSIDL_INTERNET_CACHE, CSIDL_LOCAL_APPDATA, CSIDL_PERSONAL};
for (auto location : locations)
{
SHGetFolderPath(NULL,
location | CSIDL_FLAG_CREATE,
NULL,
0,
szPath);
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '