public void CloudBlobDirectoryDelimitersInARowAsync() { foreach (String delimiter in Delimiters) { CloudBlobClient client = GenerateCloudBlobClient(); client.DefaultDelimiter = delimiter; string name = GetRandomContainerName(); CloudBlobContainer container = client.GetContainerReference(name); try { CloudPageBlob blob = container.GetPageBlobReference(delimiter + delimiter + delimiter + "Blob1"); ////Traverse from leaf to root CloudBlobDirectory directory1 = blob.Parent; Assert.AreEqual(directory1.Prefix, delimiter + delimiter + delimiter); CloudBlobDirectory directory2 = directory1.Parent; Assert.AreEqual(directory2.Prefix, delimiter + delimiter); CloudBlobDirectory directory3 = directory2.Parent; Assert.AreEqual(directory3.Prefix, delimiter); ////Traverse from root to leaf CloudBlobDirectory directory4 = container.GetDirectoryReference(delimiter); CloudBlobDirectory directory5 = directory4.GetDirectoryReference(delimiter); Assert.AreEqual(directory5.Prefix, delimiter + delimiter); CloudBlobDirectory directory6 = directory5.GetDirectoryReference(delimiter); Assert.AreEqual(directory6.Prefix, delimiter + delimiter + delimiter); CloudPageBlob blob2 = directory6.GetPageBlobReference("Blob1"); Assert.AreEqual(blob2.Name, delimiter + delimiter + delimiter + "Blob1"); Assert.AreEqual(blob2.Uri, blob.Uri); Assert.AreEqual(blob2.ServiceClient, directory6.ServiceClient); // service client should be inherited } finally { container.DeleteIfExistsAsync().Wait(); } } }
public AzureBlobRepository OperOrCreate(CloudBlobDirectory directory, AzureBlobShardingStrategy defaultShardingStrategy) { AzureBlobShardingStrategy sharding = defaultShardingStrategy; var blobs = directory.ListBlobs().ToList(); var dataBlobs = blobs.Where(s => !s.Uri.Segments.Last().StartsWith(Sharding)).ToList(); if (!blobs.Any()) { var id = GetId(sharding); var factoryBlob = directory.GetPageBlobReference(Get_Factory_Blob(directory, id.ToString())); factoryBlob.Create(0); } else { var factory = blobs.Select(s=> s.Uri.Segments.Last()).Single(b => b.StartsWith(Sharding)); int spearatorIndex = factory.IndexOf('-'); var id = factory.Substring(spearatorIndex + 1); sharding = BuildShardingStrategy(id); } return new AzureBlobRepository(directory, sharding, _builder); }