如何在一个驱动器的特定文件夹中搜索项目?

时间:2019-05-25 07:40:55

标签: c# microsoft-graph onedrive

我正在使用Microsoft Graph在OneDrive中操作文件。我需要在特定文件夹中搜索文件,如果该文件存在,请删除该文件。

我正在使用以下代码搜索文件,它给出了整个驱动器的搜索结果。

var checkIfExists = this.graphClient
 .Me
 .Drive
 .Search(item["FileName"].ToString())
 .Request()
 .GetAsync()
 .Result;

我只需要搜索特定文件夹中的文件,例如仅搜索重复文件夹中的文件。

2 个答案:

答案 0 :(得分:0)

由于Drive是代表用户一个驱动器的顶级资源,因此它与称为DriveItems的其他项目有关系。驱动器项目可以是任何内容,文件,文件夹或驱动器中存储的任何其他项目。

因此,要在驱动器中搜索特定文件,您可以提出请求;

var driveItems = await graphClient.Me.Drive.Root
.Search(<'{search-query}'>)
.Request()
.GetAsync();

这应该可以帮助您根据搜索查询获取DriveItem,一旦检索到DriveItem,就可以根据商品ID提出删除请求的请求;

await graphClient.Me.Drive
.Items[<"{item-id}">]
.Request()
.DeleteAsync();

更新:

根据对查找文件和删除文件的代码的帮助请求,我在下面提供了该文件供您参考。

var files = await graphClient.Me.Drive.Root
.Search("abc.pdf")
.Request()
.GetAsync();

var duplicateFile = files
.Where(driveItem => driveItem.ParentReference.Name
.ToLower() == "duplicate")
    .FirstOrDefault();

if(duplicateFile != null) {
await graphClient.Me.Drive
.Items[duplicateFile.Id]
.Request()
.DeleteAsync();
}

答案 1 :(得分:0)

您可以将搜索范围限定到您喜欢的任何路径。例如,使用默认的Graph Explorer数据集,我们可以使用以下查询在整个云端硬盘中搜索finance

https://graph.microsoft.com/v1.0/me/drive/root/search(q='finance')?select=name,id,webUrl

如果我们只想在单个子文件夹(例如/CR-227 Project/)下搜索,则可以使用该Path作为起点:

https://graph.microsoft.com/v1.0/me/drive/root:/CR-227 Project:/search(q='finance')?select=name,id,webUrl

另外,如果我们知道DriveItem.Id/CR-227 Project/)的01BYE5RZ6TAJHXA5GMWZB2HDLD7SNEXFFU,则可以使用该ID代替路径:

https://graph.microsoft.com/v1.0/me/drive/items/01BYE5RZ6TAJHXA5GMWZB2HDLD7SNEXFFU/search(q='finance')?select=name,id,webUrl