我正在使用container.ListBlobs,但它似乎返回了一个列表{Microsoft.WindowsAzure.Storage.Core.Util.CommonUtility.LazyEnumerable}但是当我做foreach时,该对象似乎是CloudBlobDirectory而不是列表CloudBlockBlobs。我做错了什么,或者它应该归还什么?有什么方法可以得到一个blob列表,而不是blobdirectories?
var storageAccount = CloudStorageAccount.Parse(conn);
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
var blobs = container.ListBlobs();
foreach (var blob in blobs)
{
Console.WriteLine(blob.GetType().ToString());
}
答案 0 :(得分:11)
根据CloudBloblContainer.ListBlobs()
的{{3}}:
ListBlobs方法返回的对象类型取决于 正在执行的列表类型。如果使用UseFlatBlobListing property设置为true,列表将返回一个可枚举的 CloudBlob对象的集合。如果UseFlatBlobListing设置为false (默认值),列表可能会返回包含的集合 CloudBlob对象和CloudBlobDirectory对象。后一种情况 为虚拟blob上的后续枚举提供了便利 层次结构。
因此,如果您只想要blob,则必须将UseFlatBlobListing
属性选项设置为true。
var storageAccount = CloudStorageAccount.Parse(conn);
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
// ** new code below ** //
BlobRequestOptions options = new BlobRequestOptions();
options.UseFlatBlobListing = true;
// ** new code above ** //
var blobs = container.ListBlobs(options); // <-- add the parameter to overload
foreach (var blob in blobs)
{
Console.WriteLine(blob.GetType().ToString());
}