এই ক্ষেত্রে একটি প্রশ্ন ভিত্তিক পদ্ধতির বিবেচনা করা যেতে পারে। যেহেতু ডিজাইন দ্বারা DriveItem.name
সম্পত্তি কোনও ফোল্ডারের মধ্যে স্বতন্ত্র, তাই driveItem
ড্রাইভের আইটেমটি বিদ্যমান কিনা তা নির্ধারণ করার জন্য নিম্নলিখিত কোয়েরি নাম অনুসারে কীভাবে ফিল্টার করবেন তা দেখায় :
https://graph.microsoft.com/v1.0/me/drive/items/{parent-item-id}/children?$filter=name eq '{folder-name}'
যা সি # তে এভাবে প্রতিনিধিত্ব করতে পারে:
var items = await graphClient
.Me
.Drive
.Items[parentFolderId]
.Children
.Request()
.Filter($"name eq '{folderName}'")
.GetAsync();
প্রদত্ত শেষ পয়েন্টটি দেওয়া প্রবাহে নিম্নলিখিত পদক্ষেপগুলি থাকতে পারে:
- প্রদত্ত নামের একটি ফোল্ডার ইতিমধ্যে বিদ্যমান কিনা তা নির্ধারণ করার জন্য একটি অনুরোধ জমা দিন
- ফোল্ডারটি পাওয়া না গেলে দ্বিতীয়টি জমা দিন (বা বিদ্যমান ফোল্ডারটি ফিরিয়ে দিন)
উদাহরণ
এখানে একটি আপডেট উদাহরণ
//1.ensure drive item already exists (filtering by name)
var items = await graphClient
.Me
.Drive
.Items[parentFolderId]
.Children
.Request()
.Filter($"name eq '{folderName}'")
.GetAsync();
if (items.Count > 0) //found existing item (folder facet)
{
Console.WriteLine(items[0].Id); //<- gives an existing DriveItem Id (folder facet)
}
else
{
//2. create a folder facet
var driveItem = new DriveItem
{
Name = folderName,
Folder = new Folder
{
},
AdditionalData = new Dictionary<string, object>()
{
{"@microsoft.graph.conflictBehavior","rename"}
}
};
var newFolder = await graphClient
.Me
.Drive
.Items[parentFolderId]
.Children
.Request()
.AddAsync(driveItem);
}