2012-04-05 2 views
1

CloudBlobContainer.ListBlobs을 사용하여 IListBlobItems 목록을 가져오고 있습니다. 나는 다음 코드를 사용하여 BLOB의 크기를 표시하는 각 항목에 대한 반복 해요 : I 변수 blocks의 수를 검사 할 때, 그러나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); 
      } 

     } 

를, 그것은 왜 항상 0입니다

답변

5

DownloadBlockList()은 블롭이 처음에 블록 단위로 업로드 된 경우에만 유효합니다 (100 % 확신하지 않음). 그래서 블록을 다시 얻지 못할 수도 있습니다.

어쨌든 blob의 전체 크기 만 원하는 것처럼 보입니다. 그래서 blob.Properties.Length 속성을 사용하여 쉽게 접근 할 수있다 : 대답에 대한

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

완벽! 정확히 내가 뭘 찾고 있어요. –

0

CloudBlockBlob 유형 대신 CloudBlob을 확인해야한다고 생각합니다. 그 외에 다른 것을 추가하면 크기를 얻으실 수 있습니까? 그렇지 않다면, 코드가 else에 들어가는 것을 보시오. b.size는 단지 0입니까?

+0

감사합니다,하지만 난 생각 만 CouldBlockBlobs 블록을 가지고 생각합니다. 사실, CloudBlob에는 DownloadBlockList 메소드가 없습니다. CloudBlockBlob에만 해당 메소드가 있습니다. –