FOLDERID_SkyDrive无法识别OneDrive for Business路径,如何获取其正确根目录?
获取OneDrive for Business根路径的正确方法
这个问题很常见——你用FOLDERID_SkyDrive拿到的是个人版OneDrive的路径,而OneDrive for Business需要用专门的标识:FOLDERID_SkyDriveCommercial。
修正后的代码示例
直接替换对应的FOLDERID参数就能得到正确路径,代码如下:
#include <windows.h> #include <shlobj.h> #include <iostream> int main() { PWSTR odBusinessPath = nullptr; HRESULT hr = SHGetKnownFolderPath(FOLDERID_SkyDriveCommercial, KF_FLAG_DEFAULT, NULL, &odBusinessPath); if (SUCCEEDED(hr)) { std::wcout << L"OneDrive for Business 根路径: " << odBusinessPath << std::endl; CoTaskMemFree(odBusinessPath); // 别忘了释放API分配的内存 } else { std::wcout << L"获取路径失败,错误码: " << hr << std::endl; } return 0; }
关键细节解释
FOLDERID_SkyDrive:微软早期把个人云存储叫SkyDrive,后来改名OneDrive,这个ID一直保留对应个人账户的同步路径,也就是你拿到的%USERPROFILE%\OneDriveFOLDERID_SkyDriveCommercial:专门为OneDrive for Business(工作/学校账户)设计的标识,会准确返回类似%USERPROFILE%\OneDrive - MyCompany的路径- 系统版本要求:这个ID从Windows 8.1开始支持,现在主流系统都满足这个要求
额外提示
- 如果用户同时登录了个人和商业版OneDrive,分别调用
FOLDERID_SkyDrive和FOLDERID_SkyDriveCommercial会得到两个独立的路径,不会互相干扰 - 调用时不需要特殊权限,只要当前用户已经登录了OneDrive for Business账户,就能正常获取路径
内容的提问来源于stack exchange,提问作者asnyder
相关产品推荐
相关产品推荐

