Как искать предмет в определенной папке на одном диске? - PullRequest
0 голосов
/ 25 мая 2019

Я использую Microsoft Graph для работы с файлами в OneDrive.Мне нужно найти файл в определенной папке, и если файл существует, удалите этот файл.

Я использую следующий код для поиска файла, он выдает результаты поиска для всего диска.

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

Мне нужно искать файл только в определенной папке, например, только в папке-дубликате.

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Вы можете настроить поиск по любому пути, который вам нравится.Например, используя стандартный набор данных Graph Explorer , мы можем выполнить поиск 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

Кроме того, если мы знаем DriveItem.Id для /CR-227 Project/ (01BYE5RZ6TAJHXA5GMWZB2HDLD7SNEXFFU), то мыможет использовать этот идентификатор вместо пути:

https://graph.microsoft.com/v1.0/me/drive/items/01BYE5RZ6TAJHXA5GMWZB2HDLD7SNEXFFU/search(q='finance')?select=name,id,webUrl
0 голосов
/ 25 мая 2019

Поскольку диск - это ресурс верхнего уровня, представляющий один диск пользователя, он связан с другими элементами, известными как DriveItems. Элементом диска может быть что угодно, файл, папка или любой другой элемент, хранящийся на диске.

Таким образом, для поиска определенного файла на диске вы можете сделать запрос;

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

Это должно помочь вам получить DriveItem на основе вашего поискового запроса. После извлечения DriveItem вы можете сделать запрос на его удаление на основе идентификатора элемента;

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();
}
...