Я нашел много информации о том, как переместить Azure CloudFile. Но мне нужно переместить весь CloudFileDirectory. Я действительно надеюсь, что мне не придется перебирать все файлы внутри каталога и перемещать их по одному.
Примечание: мы используем Microsoft.WindowsAzure.Storage.File
, а не Microsoft.Azure.Storage.File
.
(Не спрашивай.)
В sdk/api таких методов нет.
Помимо метода цикла, вот что я могу придумать:
1.Смонтировать файловое хранилище как локальный диск, затем используйте его как локальный каталог, используя метод Каталог.Переместить.
2. Другой способ — использовать Microsoft.Azure.Storage.DataMovement, версия 0.9.0 (обратите внимание, используйте последнюю версию, в которой используется Microsoft.Azure.Storage.File, но вы не выбираете ее).
Затем используйте метод 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.