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

C# 如何在一个驱动器中搜索特定文件夹中的项目?,c#,microsoft-graph-api,onedrive,C#,Microsoft Graph Api,Onedrive,我正在使用Microsoft Graph操作OneDrive中的文件。我需要搜索特定文件夹中的文件,如果该文件存在,请删除该文件 我使用下面的代码来搜索文件,它给出了整个驱动器的搜索结果 var checkIfExists = this.graphClient .Me .Drive .Search(item["FileName"].ToString()) .Request() .GetAsync() .Result; 我只需要在特定文件夹中搜索文件,例如仅在重复文件夹中搜索文件。由

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

我使用下面的代码来搜索文件,它给出了整个驱动器的搜索结果

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

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

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

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

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

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

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

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

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

https://graph.microsoft.com/v1.0/me/drive/root/search(q='finance')?select=name,id,webUrl
如果我们希望只在单个子文件夹下搜索(例如
/CR-227 Project/
),那么我们可以使用该路径作为起点:

https://graph.microsoft.com/v1.0/me/drive/root:/CR-227 Project:/search(q='finance')?select=name,id,webUrl
此外,如果我们知道
/CR-227项目/
01BYE5RZ6TAJHXA5GMWZB2HDLD7SNEXFFU)的
DriveItem.Id
),那么我们可以使用该Id而不是路径:

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

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

https://graph.microsoft.com/v1.0/me/drive/root/search(q='finance')?select=name,id,webUrl
如果我们希望只在单个子文件夹下搜索(例如
/CR-227 Project/
),那么我们可以使用该路径作为起点:

https://graph.microsoft.com/v1.0/me/drive/root:/CR-227 Project:/search(q='finance')?select=name,id,webUrl
此外,如果我们知道
/CR-227项目/
01BYE5RZ6TAJHXA5GMWZB2HDLD7SNEXFFU)的
DriveItem.Id
),那么我们可以使用该Id而不是路径:

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

您建议的搜索查询提供搜索集合页面,如果文件存在于多个文件夹中,则返回所有结果,这将很难找到要删除的文件。我希望您使用的搜索查询正确吗?我在代码片段中放的是占位符。我是graph api的新手,请您建议搜索查询。让名为“abc.pdf”的文件在文件夹中重复搜索。“abc.pdf”文件也位于另一个文件夹附件中。我不想包含附件文件夹中的搜索结果。我已使用代码段更新了答案。希望有帮助。Where条件引发异常:对象引用未设置为对象的实例。无论是否找到匹配项,driveItem.ParentReference.Name每次都返回null。您建议的搜索查询将提供搜索集合页,如果文件存在于多个文件夹中,则返回所有结果,这将很难找到要删除的文件。我希望您使用的搜索查询正确吗?我在代码片段中放的是占位符。我是graph api的新手,请您建议搜索查询。让名为“abc.pdf”的文件在文件夹中重复搜索。“abc.pdf”文件也位于另一个文件夹附件中。我不想包含附件文件夹中的搜索结果。我已使用代码段更新了答案。希望有帮助。Where条件引发异常:对象引用未设置为对象的实例。无论是否找到匹配项,driveItem.ParentReference.Name每次都返回null。您确实需要搜索特定文件夹(及其所有子文件夹),还是只需要知道具有特定名称的文件是否是特定文件夹的子文件夹?搜索可能会过度。我实际上需要在文件夹中搜索文件名。您确实需要搜索特定文件夹(及其所有子文件夹),还是只需要知道具有特定名称的文件是否是特定文件夹的子文件夹?搜索可能有些过度,我实际上需要在文件夹中搜索文件名。