2012-04-05 7 views
1

CloudBlobContainer.ListBlobsを使用してIListBlobItemsのリストを取得しています。私は、変数blocks上の数をチェックしたときにそれがなぜ、それは常に0である、しかしMicrosoft.WindowsAzure.StorageClient.CloudBlockBlob.DownloadBlockListは0ブロックを返します

 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); 
      } 

     } 

:私は、次のコードを使用して、ブロブの大きさを示すために、各エントリをループしていますか?

答えて

5

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

いずれにしても、とにかくブロブの合計サイズのみが必要なようです。答えを

CloudBlockBlob blockBlob = (CloudBlockBlob)item; 
blockBlob.FetchAttributes(); 
Console.WriteLine(blockBlob.Name.PadRight(50, ' ') + blockBlob.Properties.Length); 
+0

パーフェクト!正確に私が探しているもの。 –

0

CloudBlockBlobタイプではなく、CloudBlobを確認する必要があると思います。それ以外のものを追加した場合は、サイズを取得しますか?それ以外の場合は、コードがelseに入り、b.sizeがゼロになっていますか?

+0

おかげで、私は唯一のCouldBlockBlobsはしかし、ブロックがあると思う:だからblob.Properties.Lengthプロパティを使用すると、より簡単なアプローチかもしれません。実際、CloudBlobにはDownloadBlockListメソッドがありません。 CloudBlockBlobだけがそのメソッドを持ちます。 –

関連する問題