Я пытаюсь получить имена каталогов только для любых каталогов в указанном c месте с хранилищем BLOB-объектов
У меня есть вспомогательный класс ниже
public static class BlobHelper
{
private static CloudBlobContainer _cloudBlobContainer;
private const string _containerName = "administrator";
public static void Setup(string connectionString)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
_cloudBlobContainer = cloudBlobClient.GetContainerReference(_containerName);
}
public static List<string> GetDirectoryNames(string relativeAddress)
{
var result = new List<string>();
var directory = _cloudBlobContainer.GetDirectoryReference(relativeAddress);
var folders = directory.ListBlobs().OfType<CloudBlobDirectory>();
foreach (var folder in folders)
{
var name = folder.Uri.AbsolutePath;
name = name.Replace(folder.Parent.Prefix, string.Empty)
.Replace(@"/", string.Empty)
.Replace(_containerName, string.Empty);
result.Add(name);
}
}
}
Процесс получения только имена каталогов (т.е. не полная иерархия) кажутся немного странными, хотя это работает
Есть ли лучший способ сделать это?
Я попробовал подход ниже
var directory = _cloudBlobContainer.GetDirectoryReference(relativeAddress);
var blobs = directory.ListBlobs(true).OfType<CloudBlobDirectory>();;
var blobNames = blobs.OfType<CloudBlockBlob>().Select(b => b.Name).ToList();
return blobNames;
Основным отличием от вышесказанного является использование UseFlatBlobListing как true
Однако этот подход не приводит к тому, что папки вообще не возвращаются, тогда как другие мои логи c по крайней мере дают мне 2 папки, которые я ожидаю найти
Есть идеи, что я делаю не так?
Приветствия
Пол