gpt4 book ai didi

c# - 使用 GraphServiceClient 在 OneDriveForBusiness 中创建嵌套目录

转载 作者:行者123 更新时间:2023-11-30 15:15:24 32 4
gpt4 key购买 nike

我一直在尝试利用 Microsoft Graph Api 在 MVC Web 应用程序中与用户的单驱动器业务进行通信,已使用委派权限设置所有内容,并且可以在登录用户的 ODB 中读取和写入数据,但是有什么问题吗?通过哪种方式可以创建嵌套文件夹或目录结构?

目前,我正在使用下面的代码在用户 ODB 的根目录中创建文件夹,并且工作正常,但在上传文件之前提供路径时,正在寻找一种方法来创建文件夹的层次结构。

 DriveItem rootDirectory = graphServiceClient.Me.Drive.Root.Children.Request().AddAsync(new DriveItem
{
Name = "RootDirectory",
Folder = new Folder(),
}).Result;

对于 RootDirectory 内的另一个文件夹尝试此操作,但似乎不起作用(其中 rootDirectory 是上面创建的对象)

 DriveItem subDirectory = graphServiceClient.Me.Drive.Root.Children.Request().AddAsync(new DriveItem
{
Name = "SubDirectory",
Folder = rootDirectory.Folder
}).Result;

即使它可以进行一些修复,但不确定这是否是最佳的方法,建议将不胜感激。

最佳答案

我做了一个小函数来做到这一点。

虽然使用 try-catch 确实不是最佳实践,但最终我认为这比递归地轮询每个文件夹以查找其子文件夹,然后按名称查找(如果路径的一部分存在)要好。

public async Task CreateFolder(string foldername)
{
string[] splitted = foldername.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
var f = graphServiceClient.Me.Drive.Root;
string p = "";
IDriveItemRequestBuilder b;
DriveItem driveItem;
foreach (string folder in splitted)
{
p = string.Format("{0}{1}{2}", p, string.IsNullOrEmpty(p) ? "" : "/", folder);

b = graphServiceClient.Me.Drive.Root.ItemWithPath(p);
try
{
driveItem = await b.Request().GetAsync();
}
catch
{
driveItem = null;
}
if (driveItem == null)
{
var f2 = await f.Children.Request().AddAsync(new DriveItem()
{
Name = folder,
Folder = new Folder()
});

b = graphServiceClient.Me.Drive.Root.ItemWithPath(p);
}
f = b;
}
}

你的调用是这样的:

await CreateFolder("folder1/folder2/folder3");

关于c# - 使用 GraphServiceClient 在 OneDriveForBusiness 中创建嵌套目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52062341/

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