Как я могу перенести рекурсивную папку файлов в OneDrive по MS Graph - PullRequest
0 голосов
/ 02 мая 2020

Используя Microsoft API Graph, я переношу папки и файлы в OneDrive. Но у меня есть следующая проблема:

StartPath ist: C: \ Desktop \ Something \

Мои пути выглядят примерно так:

C: \ Desktop \ Something \ Test

C: \ Desktop \ Something \ Test \ Something

C: \ Desktop \ Something \ Test \ Something1

C: \ Desktop \ Something \ Test \ Something \ Nothing

C: \ Desktop \ Something \ Test \ Something \ Nothing2

C: \ Desktop \ Something \ Test2

C: \ Desktop \ Something \ Test2 \ Something

C: \ Desktop \ Something \ Test2 \ Something \ vtzf

В каждой папке есть файлы.

Когда я сохраняю первую папку (C: \ Desktop \ Keyboard \ Test), она должна находиться в каталоге root, потому что это папка 1.

var folderToOneDrive = await graphServiceClient.Users[user.Id].Drive.Items.Request().AddAsync(driveFolder);
                FolderId = folderToOneDrive.Id;

Если я сейчас сохраню папку, я получу идентификатор этой папки.

С этим идентификатором я теперь могу сохранить следующую папку (C: \ Desktop \ Something \ Test \ Something)

var folderToOneDrive = await graphServiceClient.Users[user.Id].Drive.Items[FolderId].Children.Request().AddAsync(driveFolder);

        FolderId = folderToOneDrive.Id;

Проблема теперь в том, что мне нужно установить нулевой FolderId (локальная строка), когда я вернусь в root, иначе у FolderID всегда должен быть идентификатор из последней папки .

Мой метод:

 static async void Execute(GraphServiceClient graphClien, User user, string sDir)
        {
            try
            {
                foreach (string d in System.IO.Directory.GetDirectories(sDir))
                {
                    string folderName = new DirectoryInfo(d).Name;
                    await WriteFolderToOneDrive(graphClien, user, folderName);
                    foreach (string f in System.IO.Directory.GetFiles(d))
                    {
                        using (FileStream stream = System.IO.File.Open(f, FileMode.Open))
                        {
                            string fileName = Path.GetFileName(f);
                            await WriteFilesToOneDrive(graphClien, stream, user, fileName, FolderId);
                        }
                    }
                    Execute(graphClien, user, d);
                }
            }
            catch (Exception excpt)
            {
                Console.WriteLine(excpt.Message);
            }

        }

Я использую:

C#. Net версия 4.7.2. Visual Studio

...