从本地缓存的文件中获取onedrive文件URL

时间:2017-10-05 13:37:09

标签: c# excel

我正在寻找一种方法来获取缓存到本地OneDrive文件夹的文件的OneDrive文件URL?我唯一能想到的是为每个OneDrive文件夹硬编码一些根URL,但这看起来很讨厌!

是否有人知道任何允许基于本地文件路径查询URL的OneDrive客户端API?

我的用例: 我试图附加并打开Excel工作簿的实例。我曾经能够做到Marshal.BindToMoniker(_workbookPath);

然而,似乎Excel现在在ROT而不是本地文件路径中注册OneDrive URL。这种情况发生在我认为将新的自动保存功能带入Excel 2016的更新中,这似乎是我现有代码破坏的时间。

这里有一个类似的未回答的问题:C# OneDrive for Business / SharePoint: get server path from locally synced file

2 个答案:

答案 0 :(得分:1)

可能想改用以下键:

HKEY_CURRENT_USER\Software\SyncEngines\Providers\OneDrive

这包括以下注册表值: UrlNamespace:(SharePoint网站URL) MountPoint :(本地驱动程序位置)

它似乎确实包含不再同步的旧值-但检查起来并不难

HKEY_CURRENT_USER\Software\Microsoft\OneDrive\Accounts\Business1\ScopeIdToMountPointPathCache

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager

对于正在积极同步的路径。

答案 1 :(得分:0)

我还在寻找一种解决方案,用于在OneDrive同步文件资源管理器中将SharePoint网址获取到文件。 我注意到您在C:\ Users \%username%\ AppData \ Local \ Microsoft \ OneDrive \ settings \ Business1 {GUID} .ini下获得OneDrive同步文件夹和SharePoint GUID之间的映射 示例:

libraryScope = 1 630c2a866d9c458b81060eff107887ed+1 5 "GUIDEs" "Documents" 4 "https://continental.sharepoint.com/teams/team_10000035" "8d4b558f-7b2e-40ba-ad1f-e04d79e6265a" e0266a43caf347238f684bab486f4e51 e0d25dcb1a014f5f86d787984f6327c2 4f86b3e3e54e42e0bb0f7a58eadf0335 0 "" 0 4cde5c00-3fe3-4162-b831-d8ef440e1593
libraryFolder = 0 1 8bbfe07dfeff41cea7ab5da4a554592a+1 1558084235 "D:\DSUsers\uid41890\Continental AG\GUIDEs - General" 2 "General" bd0c1b7c-2a1f-4492-8b1b-8e152c9e0c26

您在注册表Computer \ HKEY_CURRENT_USER \ Software \ Microsoft \ OneDrive \ Accounts \ Business1 \ ScopeIdToMountPointPathCache中也具有此映射

在GUID中,您可以使用SPWeb.GetFile(Guid)

来获取路径。

如果您可以为给出返回SharePoint URL的本地OneDrive文件路径的独立功能,请在这里分享您的解决方案。