// copy a directory of the same container to another container
        public static List<ICancellableAsyncResult> CopyBlobDirectory(CloudBlobDirectory srcDirectory, CloudBlobContainer destContainer, string sourceblobToken)
        {
            List<ICancellableAsyncResult> mylistresults = new List<ICancellableAsyncResult>();

            var srcBlobList = srcDirectory.ListBlobs(
                useFlatBlobListing: true,
                blobListingDetails: BlobListingDetails.None).ToList();

            foreach (var src in srcBlobList)
            {
                var srcBlob = src as ICloudBlob;

                // Create appropriate destination blob type to match the source blob
                ICloudBlob destBlob;
                if (srcBlob.Properties.BlobType == BlobType.BlockBlob)
                    destBlob = destContainer.GetBlockBlobReference(srcBlob.Name);
                else
                    destBlob = destContainer.GetPageBlobReference(srcBlob.Name);

                // copy using src blob as SAS
                mylistresults.Add(destBlob.BeginStartCopyFromBlob(new Uri(srcBlob.Uri.AbsoluteUri + sourceblobToken), null, null));
            }

            return mylistresults;
        }
Beispiel #2
0
        /// <summary>
        /// Devuelve todos los archivos contenidos en un directorio de manera recursiva o no
        /// </summary>
        /// <param name="blobDirectory"></param>
        /// <param name="isRecursive"></param>
        /// <returns></returns>
        public static IEnumerable<CloudBlockBlob> GetFilesFrom(CloudBlobDirectory blobDirectory, bool isRecursive)
        {
            foreach (var blob in blobDirectory.ListBlobs().OfType<CloudBlockBlob>())
            {
                yield return blob;
            }

            if (isRecursive == false)
                yield break;

            foreach (var blob in blobDirectory.ListBlobs().OfType<CloudBlobDirectory>())
            {
                foreach (var innerBlob in GetFilesFrom(blob, true))
                {
                    yield return innerBlob;
                }
            }
        }
        static void DeleteBlobDirectory(CloudBlobDirectory blobDirectory)
        {
            foreach(var blobItem in blobDirectory.ListBlobs())
            {
                var subDirectory = blobItem as CloudBlobDirectory;
                if (subDirectory != null)
                    DeleteBlobDirectory(subDirectory);

                var blob = blobItem as ICloudBlob;
                if (blob != null)
                    blob.Delete();
            }
        }
Beispiel #4
0
 private static void ListBlobsOfDirectory(CloudBlobDirectory directory)
 {
     var listOfObjects = directory.ListBlobs();
     foreach (var obj in listOfObjects)
     {
         var type = obj.GetType();
         if (type == typeof(CloudBlockBlob))
         {
             Trace.TraceInformation(obj.Uri.ToString());
         }
         else if (type == typeof(CloudBlobDirectory))
         {
             ListBlobsOfDirectory((CloudBlobDirectory)obj);
         }
     }
 }
        public void CloudBlobDirectoryGetParent()
        {
            foreach (String delimiter in Delimiters)
            {
                CloudBlobClient client = GenerateCloudBlobClient();
                client.DefaultDelimiter = delimiter;
                string             name      = GetRandomContainerName();
                CloudBlobContainer container = client.GetContainerReference(name);
                try
                {
                    container.Create();
                    CloudPageBlob blob = container.GetPageBlobReference("Dir1" + delimiter + "Blob1");
                    blob.Create(0);
                    Assert.AreEqual("Dir1" + delimiter + "Blob1", blob.Name);

                    // get the blob's parent
                    CloudBlobDirectory parent = blob.Parent;
                    Assert.AreEqual(parent.Prefix, "Dir1" + delimiter);

                    // get container as parent
                    CloudBlobDirectory root = parent.Parent;
                    Assert.AreEqual(root.Prefix, "");

                    // make sure the parent of the container dir is null
                    CloudBlobDirectory empty = root.Parent;
                    Assert.IsNull(empty);

                    // from container, get directory reference to container
                    root = container.GetDirectoryReference("");
                    Assert.AreEqual("", root.Prefix);
                    Assert.AreEqual(container.Uri.AbsoluteUri, root.Uri.AbsoluteUri);

                    List <IListBlobItem> list = root.ListBlobs().ToList();
                    Assert.AreEqual(1, list.Count);

                    // make sure the parent of the container dir is null
                    empty = root.Parent;
                    Assert.IsNull(empty);

                    blob.DeleteIfExists();
                }
                finally
                {
                    container.DeleteIfExists();
                }
            }
        }
        private static void DeleteAllBlobsDir(CloudBlobDirectory cloudBlobDirectory)
        {
            foreach (var blob in cloudBlobDirectory.ListBlobs())
            {
                var blockBlob = blob as CloudBlockBlob;
                if (blockBlob != null)
                {
                    blockBlob.DeleteIfExists();
                }

                var directory = blob as CloudBlobDirectory;
                if (directory != null)
                {
                    DeleteAllBlobsDir(directory);
                }
            }
        }
Beispiel #7
0
        // delete folders
        public void deleteFolder(CloudBlobContainer container, CloudBlobDirectory tempDir)
        {
            try
            {
                IEnumerable<IListBlobItem> blobs = tempDir.ListBlobs();

                foreach (IListBlobItem item in blobs)
                {

                    // for items in subdirecories
                    // parent directory doesn't need this
                    if (item.GetType() == typeof(CloudBlockBlob))
                    {
                        CloudBlockBlob blob = (CloudBlockBlob)item;
                        //blob.Delete();
                        blob.DeleteIfExists(DeleteSnapshotsOption.IncludeSnapshots);

                    }
                    else if (item.GetType() == typeof(CloudPageBlob))
                    {
                        CloudPageBlob blob = (CloudPageBlob)item;
                        blob.DeleteIfExists(DeleteSnapshotsOption.IncludeSnapshots);
                    }
                    //else if (item.GetType() == typeof(CloudBlobDirectory))
                    //{
                    //    CloudBlobDirectory blob = (CloudBlobDirectory)item;
                    //    blob.
                    //}
                    else
                    {
                        // delete folders recursively
                        CloudBlobDirectory blobDir = (CloudBlobDirectory)item;
                        deleteFolder(container, blobDir);
                    }
                }
            }
            catch
            {
                throw;
            }
        }
        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);
        }
Beispiel #9
0
            private static long GetDirectorySize(CloudBlobDirectory directoryBlob) {
                long size = 0;

                foreach (var blobItem in directoryBlob.ListBlobs()) {
                    if (blobItem is CloudBlockBlob)
                        size += ((CloudBlockBlob)blobItem).Properties.Length;

                    if (blobItem is CloudBlobDirectory)
                        size += GetDirectorySize((CloudBlobDirectory)blobItem);
                }

                return size;
            }
        public void CloudBlobDirectoryFlatListing()
        {
            foreach (String delimiter in Delimiters)
            {
                CloudBlobClient client = GenerateCloudBlobClient();
                client.DefaultDelimiter = delimiter;
                string             name      = GetRandomContainerName();
                CloudBlobContainer container = client.GetContainerReference(name);

                try
                {
                    container.Create();
                    if (CloudBlobDirectorySetupWithDelimiter(container, delimiter))
                    {
                        IEnumerable <IListBlobItem> list1 = container.ListBlobs("TopDir1" + delimiter, false, BlobListingDetails.None, null, null);

                        List <IListBlobItem> simpleList1 = list1.ToList();
                        ////Check if for 3 because if there were more than 3, the previous assert would have failed.
                        ////So the only thing we need to make sure is that it is not less than 3.
                        Assert.IsTrue(simpleList1.Count == 3);

                        IListBlobItem item11 = simpleList1.ElementAt(0);
                        Assert.IsTrue(item11.Uri.Equals(container.Uri + "/TopDir1" + delimiter + "Blob1"));

                        IListBlobItem item12 = simpleList1.ElementAt(1);
                        Assert.IsTrue(item12.Uri.Equals(container.Uri + "/TopDir1" + delimiter + "MidDir1" + delimiter));

                        IListBlobItem item13 = simpleList1.ElementAt(2);
                        Assert.IsTrue(item13.Uri.Equals(container.Uri + "/TopDir1" + delimiter + "MidDir2" + delimiter));
                        CloudBlobDirectory midDir2 = (CloudBlobDirectory)item13;

                        IEnumerable <IListBlobItem> list2 = container.ListBlobs("TopDir1" + delimiter + "MidDir1", true, BlobListingDetails.None, null, null);

                        List <IListBlobItem> simpleList2 = list2.ToList();
                        Assert.IsTrue(simpleList2.Count == 2);

                        IListBlobItem item21 = simpleList2.ElementAt(0);
                        Assert.IsTrue(item21.Uri.Equals(container.Uri + "/TopDir1" + delimiter + "MidDir1" + delimiter + "EndDir1" + delimiter + "EndBlob1"));

                        IListBlobItem item22 = simpleList2.ElementAt(1);
                        Assert.IsTrue(item22.Uri.Equals(container.Uri + "/TopDir1" + delimiter + "MidDir1" + delimiter + "EndDir2" + delimiter + "EndBlob2"));

                        IEnumerable <IListBlobItem> list3 = container.ListBlobs("TopDir1" + delimiter + "MidDir1" + delimiter, false, BlobListingDetails.None, null, null);

                        List <IListBlobItem> simpleList3 = list3.ToList();
                        Assert.IsTrue(simpleList3.Count == 2);

                        IListBlobItem item31 = simpleList3.ElementAt(0);
                        Assert.IsTrue(item31.Uri.Equals(container.Uri + "/TopDir1" + delimiter + "MidDir1" + delimiter + "EndDir1" + delimiter));

                        IListBlobItem item32 = simpleList3.ElementAt(1);
                        Assert.IsTrue(item32.Uri.Equals(container.Uri + "/TopDir1" + delimiter + "MidDir1" + delimiter + "EndDir2" + delimiter));

                        IEnumerable <IListBlobItem> list4 = midDir2.ListBlobs(true);

                        List <IListBlobItem> simpleList4 = list4.ToList();
                        Assert.IsTrue(simpleList4.Count == 2);

                        IListBlobItem item41 = simpleList4.ElementAt(0);
                        Assert.IsTrue(item41.Uri.Equals(container.Uri + "/TopDir1" + delimiter + "MidDir2" + delimiter + "EndDir1" + delimiter + "EndBlob1"));

                        IListBlobItem item42 = simpleList4.ElementAt(1);
                        Assert.IsTrue(item42.Uri.Equals(container.Uri + "/TopDir1" + delimiter + "MidDir2" + delimiter + "EndDir2" + delimiter + "EndBlob2"));
                    }
                }
                finally
                {
                    container.DeleteIfExists();
                }
            }
        }
 private void CollectJobRun(CloudBlobDirectory root)
 {
     var allblobs = root.ListBlobs(useFlatBlobListing: false, blobListingDetails: BlobListingDetails.None);
     foreach (var blob in allblobs)
     {
         if (blob is CloudBlobDirectory) CollectJobRun(blob as CloudBlobDirectory);
         else
         {
             runs.Add(root.Prefix);
             break;
         }
     }
 }
            private static long GetDirectorySize(CloudBlobDirectory directoryBlob) {
                long size = 0;

                foreach ( var blobItem in directoryBlob.ListBlobs() ) {
                    var blob = blobItem as CloudBlockBlob;
                    if (blob != null)
                        size += blob.Properties.Length;

                    var item = blobItem as CloudBlobDirectory;
                    if (item != null)
                        size += GetDirectorySize(item);
                }

                return size;
            }
Beispiel #13
0
 /// <summary>
 /// Deletes a directory in Azure Blob
 /// </summary>
 /// <param name="directory">The directory.</param>
 private void DeleteDirectory(CloudBlobDirectory directory)
 {
     try
     {
         foreach (var item in directory.ListBlobs())
         {
             var blockBlob = item as CloudBlockBlob;
             if (blockBlob != null)
             {
                 blockBlob.DeleteIfExists();
             }
             else
             {
                 var dir = item as CloudBlobDirectory;
                 if (dir != null)
                 {
                     this.DeleteDirectory(dir);
                 }
             }
         }
     }
     catch (Exception e)
     {
         AvroHdiSample.ReportError("Error while cleaning the cluster\n" + e);
     }
 }
        public static IEnumerable<CloudBlobDirectory> ListSubdirectories(CloudBlobDirectory cloudBlobDirectory) {
            var p = cloudBlobDirectory.Uri.AbsolutePath;
            var l = p.EndsWith("/") ? cloudBlobDirectory.Uri.AbsolutePath.Length : cloudBlobDirectory.Uri.AbsolutePath.Length + 1;

            return (from blob in cloudBlobDirectory.ListBlobs().Select(each => each.Uri.AbsolutePath.Substring(l))
                let i = blob.IndexOf('/')
                where i > -1
                select blob.Substring(0, i)).Distinct().Select(cloudBlobDirectory.GetSubdirectoryReference);
        }
Beispiel #15
0
        private List<IListBlobItem> ListVirtualDirectoryBlobs(CloudBlobDirectory dir)
        {
            var blobList = new List<IListBlobItem>();

            foreach (var blob in dir.ListBlobs())
            {
                if (blob.GetType() == typeof(CloudBlockBlob) || blob.GetType() == typeof(CloudPageBlob) )
                {
                    blobList.Add(blob);
                }

                if (blob.GetType() == typeof(CloudBlobDirectory))
                {
                    var subList = ListVirtualDirectoryBlobs((CloudBlobDirectory)blob);
                    blobList.AddRange(subList);
                }
            }

            return blobList;
        }