Microsoft.WindowsAzure.StorageClient.CloudBlockBlob.DownloadBlockList返回0个块

时间:2012-04-05 18:21:47

标签: azure azure-storage azure-storage-blobs

我正在使用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.这是为什么?

2 个答案:

答案 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只是零?