2012-04-05 37 views
1

我正在使用CloudBlobContainer.ListBlobs獲取IListBlobItems的列表。然後我遍歷每個條目,以顯示斑的大小使用下面的代碼: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); 
      } 

     } 

然而,當我檢查變量blocks計數,它始終是0,這是爲什麼?

回答

5

我相信(不是100%肯定)DownloadBlockList()只有在blob最初是以塊的形式上傳,而不是一次全部上傳時纔有效。這可能是爲什麼你沒有得到回擋。

無論如何,你似乎只想要blob的總大小。所以使用blob.Properties.Length屬性可能是一個更簡單的方法:

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

完美!正是我在找什麼。 – 2012-04-05 20:43:21

0

我認爲你應該檢查一個CloudBlob而不是CloudBlockBlob類型。如果你添加另一個,如果有的話,你會得到尺寸?如果不是這樣,你是否看到代碼進入else並且b.size只是零?

+0

感謝您的答案,但我認爲只有CouldBlockBlobs有塊,但。實際上,CloudBlob在其上沒有DownloadBlockList方法。只有CloudBlockBlob具有該方法。 – 2012-04-05 19:11:17