1

我正在使用CloudBlobContainer.ListBlobs. 然后,我使用以下代码遍历每个条目以显示 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。这是为什么呢?

4

2 回答 2

5

我相信(不是 100% 肯定)DownloadBlockList()只有当 blob 最初以块的形式上传时才有效,而不是一次全部上传。这可能就是为什么你没有得到任何回报。

无论如何,您似乎只想要 blob 的总大小。因此使用该blob.Properties.Length属性可能是一种更简单的方法:

CloudBlockBlob blockBlob = (CloudBlockBlob)item;
blockBlob.FetchAttributes();
Console.WriteLine(blockBlob.Name.PadRight(50, ' ') + blockBlob.Properties.Length);
于 2012-04-05T20:05:33.103 回答
0

我认为您应该检查 CloudBlob 而不是 CloudBlockBlob 类型。如果你加上另一个,你能得到尺寸吗?如果不是这样,您是否看到代码进入 else if 并且 b.size 只是零?

于 2012-04-05T19:06:36.213 回答