2011-06-25 22 views
8

Bir "neyin sonucunu yinelemeyi denediğimde" Belirtilen kaynak mevcut değil "özel durum alıyorum. ListBlobs() çağrısı. Blob özelliklerini doğrudan eriştiğimde alabilirim, ancak alt dizindeki tüm lekelerin bir listesini almaya çalışıyorum.azure CloudBlobDirectory.ListBlobs() "Belirtilen kaynak mevcut değil." Döndürür, ancak fetchAttributes() aynı verileri kullanarak çalışır.

Sorunun tam olarak nerede olduğunu görmek için bu küçük testi yazdım. Burada bir test pilotum ve iki yöntem var. İlk yöntem "GetBlockBlobDateTime" düzgün çalışır ve varolan bloğun tarih saatini döndürür. "GetBlobDirFiles" adlı ikinci yöntem, aynı girdileri kullanır ve blobItems'i yinelemeyi denediğimde başlatmayı başlatır.

foreach (IListBlobItem blobItem in blobItems) 

Her iki yöntemde de aynı verilerin kullanıldığını unutmayın. Neyi kaçırıyorum?

Görünüşe göre, dosya özelliklerini almak için izin gerekmez, ancak dizindeki dosyaları listelemek için yapın:

public static void DoTest(string baseURL, string container, string directory, string fileName) 
    { 
     DateTime t = GetBlockBlobDateTime(baseURL, container, directory, fileName); 
     List<string> fileList = GetBlobDirFiles(baseURL, container, directory); 
    } 

    public static DateTime GetBlockBlobDateTime(string baseURL, string container, string directory, string fileName) 
    { 
     CloudBlobClient blobClient = new CloudBlobClient(baseURL); 
     CloudBlobDirectory blobDir = blobClient.GetBlobDirectoryReference(container); 
     CloudBlobDirectory subDirectory = blobDir.GetSubdirectory(directory); 
     CloudBlockBlob cloudBlockBlob = subDirectory.GetBlockBlobReference(fileName); 
     cloudBlockBlob.FetchAttributes(); 
     DateTime cloudTimeStampUTC = cloudBlockBlob.Properties.LastModifiedUtc; 
     return cloudTimeStampUTC; 
    } 

    public static List<string> GetBlobDirFiles(string baseURL, string container, string directory) 
    { 
     CloudBlobClient blobClient = new CloudBlobClient(baseURL); 
     CloudBlobDirectory blobDir = blobClient.GetBlobDirectoryReference(container); 
     CloudBlobDirectory subDirectory = blobDir.GetSubdirectory(directory); 
     IEnumerable<IListBlobItem> blobItems = subDirectory.ListBlobs(); 

     List<string> fileList = new List<string>(); 
     foreach (IListBlobItem blobItem in blobItems) 
     { 
      fileList.Add(blobItem.Uri.ToString()); 
     } 
     return fileList; 
    } 

cevap

13

Tamam, bunu anladım.

CloudBlobClient blobClient = new CloudBlobClient(baseURL); 

böyle özelliklerini almaya gidiyoruz işler:

cloudBlockBlob.FetchAttributes(); 

Ama böyle kimlik bilgilerini sağlamanız gerekir: Eğer gibi lekeler listelemek için gittiğinde

CloudBlobClient blobClient = 
        new CloudBlobClient(baseURL, 
        new StorageCredentialsAccountAndKey(myAccount, myKey)); 

this:

 var blobList = subDirectory.ListBlobs(); 
     foreach (var blobInfo in blobList) 
+1

Örnek vermek için iyi bir şey Kendiniz dışarı ve cevabı göndermek için teşekkürler. +1 –