Search code examples
c#azurecontainersblobazure-blob-storage

How to get all files from a directory in Azure BLOB using ListBlobsSegmentedAsync


While trying to access all files of the Azure blob folder, getting sample code for container.ListBlobs(); however it looks like an old one.

Old Code : container.ListBlobs();

New Code trying : container.ListBlobsSegmentedAsync(continuationToken);

I am trying to use the below code :

container.ListBlobsSegmentedAsync(continuationToken);

Folders are like :

Container/F1/file.json
Container/F1/F2/file.json
Container/F2/file.json

Looking for the updated version to get all files from an Azure folder. Any sample code would help, thanks!


Solution

  • Update: Getting all files name from a directory with Azure.Storage.Blobs v12 - Package

    var storageConnectionString = "DefaultEndpointsProtocol=...........=core.windows.net";
    var blobServiceClient = new BlobServiceClient(storageConnectionString);
    
    //get container
    var container = blobServiceClient.GetBlobContainerClient("container_name");
    
    List<string> blobNames = new List<string>();
    
    //Enumerating the blobs may make multiple requests to the service while fetching all the values
    //Blobs are ordered lexicographically by name
    //if you want metadata set BlobTraits - BlobTraits.Metadata
    var blobHierarchyItems = container.GetBlobsByHierarchyAsync(BlobTraits.None, BlobStates.None, "/");
    
    await foreach (var blobHierarchyItem in blobHierarchyItems)
    {
        //check if the blob is a virtual directory.
        if (blobHierarchyItem.IsPrefix)
        {
            // You can also access files under nested folders in this way,
            // of course you will need to create a function accordingly (you can do a recursive function)
            // var prefix = blobHierarchyItem.Name;
            // blobHierarchyItem.Name = "folderA\"
            // var blobHierarchyItems= container.GetBlobsByHierarchyAsync(BlobTraits.None, BlobStates.None, "/", prefix);     
        }
        else
        {
            blobNames.Add(blobHierarchyItem.Blob.Name);
        }
    }
    

    There are more option and example you can find it here.

    This is the link to the nuget package.