容器ListBlobs给出了一个CloudBlobDirectory的列表,我本来希望得到一个CloudBlockBlo
本文关键字:一个 本来 希望 CloudBlockBlo 列表 ListBlobs 容器 CloudBlobDirectory | 更新日期: 2023-09-27 18:22:23
我正在使用容器。ListBlob,但它似乎返回了一个列表{Microsoft.WindowsAzure.Storage.Core.Util.CommonUtility.LazyEnumerable}。然而,当我进行foreach时,对象似乎是CloudBlobDirectory,而不是CloudBlockBlob的列表。我是做错了什么,还是应该这样?有没有办法让我只得到一个Blob列表,而不是Blob目录?
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());
}
根据MSDN for CloudBloblContainer.ListBlobs()
:
ListBlob方法返回的对象类型取决于正在执行的列表的类型。如果UseFlatBlob列表属性设置为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());
}