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

Я нашел много о том, как переместить Azure CloudFile . Но мне нужно переместить всю CloudFileDirectory . Я действительно надеюсь, что мне не придется перебирать все файлы в каталоге и перемещать их по одному за раз.

Примечание: мы используем Microsoft.WindowsAzure.Storage.File, а не Microsoft.Azure.Storage.File.
(Не спрашивай.)

1 Ответ

1 голос
/ 21 июня 2019

В sdk / api таких методов нет.

Помимо метода цикла, вот что я могу придумать:

1. Смонтируйте хранилище файлов как локальный диск , затем используйте его как локальный каталог, используя метод Directory.Move .

2. Другим способом является использование Microsoft.Azure.Storage.DataMovement , версия 0.9.0 (обратите внимание, используйте последнюю версию, которая использует Microsoft.Azure.Storage. Файл, но это тот, который вы не выбираете).

Затем используйте метод CopyDirectoryAsync для копирования содержимого каталога в другой каталог, , но после завершения копирования вам также потребуется цикл для удаления исходного каталога, поскольку это не пустой каталог .

Пример кода:

            CloudStorageAccount storageAccount = new CloudStorageAccount(new StorageCredentials("xx", "xxx"), true);
            CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
            CloudFileShare fileShare = fileClient.GetShareReference("test");
            CloudFileDirectory rootDir = fileShare.GetRootDirectoryReference();

            CloudFileDirectory sourceDir = rootDir.GetDirectoryReference("t1/t2");
            CloudFileDirectory destDir = rootDir.GetDirectoryReference("t1");

            CopyDirectoryOptions options = new CopyDirectoryOptions()
            {
                Recursive = true,
            };

            TransferManager.CopyDirectoryAsync(sourceDir, destDir, false, options, null).GetAwaiter().GetResult();

          //After copy is completed, you also need loop to delete the source directory.
          //your code to delete the source directory.
...