1

を使用してIListBlobItemのリストを取得してい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

DownloadBlockList()これは、ブロブが一度にすべてではなく、最初にブロックでアップロードされた場合にのみ有効であると私は信じています(100%確実ではありません) 。それが、ブロックが戻らない理由かもしれません。

いずれにせよ、とにかくブロブの合計サイズだけが必要なようです。したがって、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

CloudBlockBlobタイプではなくCloudBlobをチェックする必要があると思います。それで他に追加すると、サイズはわかりますか?そうでない場合は、b.sizeがゼロの場合にコードがelseに入るのがわかりますか?

于 2012-04-05T19:06:36.213 に答える