首页 > 解决方案 > C#、Microsoft Graph:获取使用 OneDrive Business 同步的共享点库的本地路径

问题描述

对于业务应用程序,我们将文档存储在 Sharepoint Online 上(word、pdf、powerpoint...)。该应用程序使用 Microsoft Graph 来获取文件和元数据列表。但是,所有用户都将共享点站点与他们的 OneDrive 业务“同步”,以供本地存储/离线使用。

用户会看到一个“打开文件”按钮,以允许他打开文件并进行更改。但是我怎样才能利用 microsoft graph api 打开本地文件而不是带有文件在线版本的浏览器。

或者至少获取文件的本地“路径”,以便可以使用 Process.Start 打开它

标签: c#sharepointmicrosoft-graph-apionedrive

解决方案


目前设法通过一种类似的技术也利用注册表来做到这一点。虽然查看了我发现的所有谷歌结果,但这些年来注册表项和位置发生了很大变化。因此,肯定会更喜欢 Microsoft.Graph 中内置的“官方”方法或使用 ms-onedrive: 链接,类似于 ms-word: 链接等...

public static class ListExtensions
{
    public static String GetLocalPath(this List item)
    {
        var onedriveKey = Registry.CurrentUser.OpenSubKey(@"Software\SyncEngines\Providers\OneDrive");

        foreach (var subkeyName in onedriveKey.GetSubKeyNames())
        {
            var subkey = onedriveKey.OpenSubKey(subkeyName);

            var url = subkey.GetValue("UrlNamespace").ToString().Trim('/');

            if (url == item.WebUrl)
                return (String) subkey.GetValue("MountPoint");
        }

        return null;
    }
}

public static async Task<String> GetDocumentLocalPath(DocumentSharepoint document)
    {
        var list = await GetList(document.Library);
        var path = list.GetLocalPath();

        if (path == null)
            return null;

        return $"{path}/{document.FullName}";
    }

推荐阅读