Search code examples
azure-storageazure-blob-storage

Deleting all blobs in a directory with Azure.Storage.Blobs


I am refactor my code to Azure.Storage.Blobs as windowsAzure.Storage is getting depricated. However I have not found anyways to delete a "directoty". In the old library you could do something like:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Config.StorageConnStr);
CloudStorageAccount account = CloudStorageAccount.Parse(StorageConnection);
CloudBlobClient blobClient = account.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(ExportContainerName);
CloudBlobDirectory folder = container.GetDirectoryReference(jobid.ToLower());
var blobs = folder.ListBlobs();

foreach (var blob in blobs)
{
    ((CloudBlob)blob).DeleteIfExists();
}

But I cannot see any similar code with the new package. Any pointers?


Solution

  • You can use the GetBlobsByHierarchy method to list blobs in your directory, and then delete them.

    Please refer to my code:

                BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
                BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
                var resultSegment = containerClient.GetBlobsByHierarchy(BlobTraits.None, BlobStates.None, "/", "frankfolder/").AsPages(default, 100);
                
                foreach (Azure.Page<BlobHierarchyItem> blobPage in resultSegment)
                {
                    foreach (BlobHierarchyItem blobhierarchyItem in blobPage.Values)
                    {
                        Console.WriteLine("Blob name: {0}", blobhierarchyItem.Blob.Name);
                        containerClient.DeleteBlob(blobhierarchyItem.Blob.Name);
                    }
                }