我正在使用CloudBlobContainer.ListBlobs
获取IListBlobItems列表。然后我使用以下代码循环遍历每个条目以显示blob的大小:
foreach (IListBlobItem item in blobs)
{
if (item.GetType() == typeof(CloudBlobDirectory))
{ }
else if (item.GetType() == typeof(CloudBlockBlob))
{
CloudBlockBlob blockBlob = (CloudBlockBlob)item;
IEnumerable<ListBlockItem> blocks = blockBlob.DownloadBlockList(new BlobRequestOptions { BlobListingDetails = BlobListingDetails.All });
Console.WriteLine(blockBlob.Name.PadRight(50, ' ') +
blocks.Sum(b => b.Size));
}
else
{
Console.WriteLine(item.Uri.LocalPath);
}
}
但是,当我检查变量blocks
上的计数时,它总是为0.这是为什么?
答案 0 :(得分:5)
我相信(不是100%肯定)DownloadBlockList()
仅在blob最初是以块为单位而不是一次性上传时才有效。这可能就是你没有阻挡的原因。
无论如何,你似乎只想要blob的总大小。因此,使用blob.Properties.Length
属性可能更容易:
CloudBlockBlob blockBlob = (CloudBlockBlob)item;
blockBlob.FetchAttributes();
Console.WriteLine(blockBlob.Name.PadRight(50, ' ') + blockBlob.Properties.Length);
答案 1 :(得分:0)
我认为您应该检查CloudBlob而不是CloudBlockBlob类型。如果再加上其他的话,你会得到尺码吗?如果不是这样,你是否看到代码进入else,而b.size只是零?