C# 从Azure Blob存储容器获取最新文件夹

C# 从Azure Blob存储容器获取最新文件夹,c#,azure,azure-blob-storage,C#,Azure,Azure Blob Storage,我已经在azure中创建了blob存储 然后创建名为“MyReport”的容器 在容器“MyReport”中,我创建了两个名为“Test”和“Live”的文件夹。在“Test”和“Live”两个文件夹下都有许多子文件夹 我想要的是获得azure在这些文件夹中创建的最新文件夹 我尝试了以下方法: StorageCredentialsAccountAndKey credentials = new StorageCredentialsAccountAndKey(accountName, access

我已经在azure中创建了blob存储

然后创建名为“MyReport”的容器

在容器“MyReport”中,我创建了两个名为“Test”和“Live”的文件夹。在“Test”和“Live”两个文件夹下都有许多子文件夹

我想要的是获得azure在这些文件夹中创建的最新文件夹

我尝试了以下方法:

StorageCredentialsAccountAndKey credentials = new  StorageCredentialsAccountAndKey(accountName, accessKey);
CloudStorageAccount acc = new CloudStorageAccount(credentials, true);
CloudBlobClient client = acc.CreateCloudBlobClient();
CloudBlobDirectory container = client.GetBlobDirectoryReference(@"MyReport/Test");

var folders = container.ListBlobs().Where(b => b as CloudBlobDirectory != null).ToList();
在文件夹变量中,我得到许多文件夹,但我想得到azure创建的最新文件夹


如何做到这一点?

更新10/04:

            CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
            CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("test1");
            CloudBlobDirectory myDirectory = cloudBlobContainer.GetDirectoryReference("test");
            var myfiles = myDirectory.ListBlobs(useFlatBlobListing: true, blobListingDetails: BlobListingDetails.All).Where(b => b as CloudBlockBlob != null);

            var my_lastmodified_blob = myfiles.OfType<CloudBlockBlob>().OrderByDescending(b => b.Properties.LastModified).First();
            Console.WriteLine(my_lastmodified_blob.Parent.StorageUri.PrimaryUri.Segments.Last());
结果是:


更新10/04:

            CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
            CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("test1");
            CloudBlobDirectory myDirectory = cloudBlobContainer.GetDirectoryReference("test");
            var myfiles = myDirectory.ListBlobs(useFlatBlobListing: true, blobListingDetails: BlobListingDetails.All).Where(b => b as CloudBlockBlob != null);

            var my_lastmodified_blob = myfiles.OfType<CloudBlockBlob>().OrderByDescending(b => b.Properties.LastModified).First();
            Console.WriteLine(my_lastmodified_blob.Parent.StorageUri.PrimaryUri.Segments.Last());
结果是:


实际上,CloudBlockBlob目录不保存上次修改的日期,但在文件夹中,所有CloudBlockBlob都保存上次修改的日期。所以我们应该根据内部文件来决定

这是我的样品和它的工作

CloudBlobClient client = acc.CreateCloudBlobClient();
var container = client.GetContainerReference(@"seleniumtestreports");
CloudBlobDirectory Directory = container.GetDirectoryReference("DevTests");
var BlobFolders = Directory.ListBlobs().OfType<CloudBlobDirectory>()        .Select(f => new { cloudBlobDirectory = f,LastModified = f.ListBlobs().OfType<CloudBlockBlob>().OrderByDescending(dd => dd.Properties.LastModified).FirstOrDefault().Properties.LastModified }).ToList();

var getLastestFolder = BlobFolders.OrderByDescending(s => s.LastModified).FirstOrDefault();
CloudBlobClient=acc.CreateCloudBlobClient();
var container=client.GetContainerReference(@“seleniumtestreports”);
CloudBlobDirectoryDirectory=container.GetDirectoryReference(“DevTests”);
var BlobFolders=Directory.ListBlobs().OfType().Select(f=>new{cloudBlobDirectory=f,LastModified=f.ListBlobs().OfType().OrderByDescending(dd=>dd.Properties.LastModified).FirstOrDefault().Properties.LastModified}.ToList();
var getLastTestFolder=BlobFolders.OrderByDescending(s=>s.LastModified).FirstOrDefault();

实际上,CloudBlockBlob目录不保存上次修改的日期,但在文件夹中,所有CloudBlockBlob都保存上次修改的日期。所以我们应该根据内部文件来决定

这是我的样品和它的工作

CloudBlobClient client = acc.CreateCloudBlobClient();
var container = client.GetContainerReference(@"seleniumtestreports");
CloudBlobDirectory Directory = container.GetDirectoryReference("DevTests");
var BlobFolders = Directory.ListBlobs().OfType<CloudBlobDirectory>()        .Select(f => new { cloudBlobDirectory = f,LastModified = f.ListBlobs().OfType<CloudBlockBlob>().OrderByDescending(dd => dd.Properties.LastModified).FirstOrDefault().Properties.LastModified }).ToList();

var getLastestFolder = BlobFolders.OrderByDescending(s => s.LastModified).FirstOrDefault();
CloudBlobClient=acc.CreateCloudBlobClient();
var container=client.GetContainerReference(@“seleniumtestreports”);
CloudBlobDirectoryDirectory=container.GetDirectoryReference(“DevTests”);
var BlobFolders=Directory.ListBlobs().OfType().Select(f=>new{cloudBlobDirectory=f,LastModified=f.ListBlobs().OfType().OrderByDescending(dd=>dd.Properties.LastModified).FirstOrDefault().Properties.LastModified}.ToList();
var getLastTestFolder=BlobFolders.OrderByDescending(s=>s.LastModified).FirstOrDefault();

根据@Ivan Yang的线索,我找到了答案

线索是使用BlobRequest选项。这对我来说很有用

StorageCredentialsAccountAndKey credentials = new StorageCredentialsAccountAndKey(accountName, accessKey);

        CloudStorageAccount acc = new CloudStorageAccount(credentials, true);

        CloudBlobClient client = acc.CreateCloudBlobClient();
        CloudBlobDirectory container = client.GetBlobDirectoryReference(@"MyReport/Test");

        BlobRequestOptions options = new BlobRequestOptions();
        options.UseFlatBlobListing = true;
        var listblob = container.ListBlobs(options);

        var latestFolderAzure = listblob.OfType<CloudBlob>().OrderBy(b => b.Properties.LastModifiedUtc).LastOrDefault()?.Parent.Uri.AbsoluteUri;
StorageCredentialsAccountAndKey凭据=新的StorageCredentialsAccountAndKey(accountName,accessKey);
CloudStorageAccount acc=新的CloudStorageAccount(凭据,true);
CloudBlobClient=acc.CreateCloudBlobClient();
CloudBlobDirectoryContainer=client.GetBlobDirectoryReference(@“MyReport/Test”);
BlobRequestOptions options=新的BlobRequestOptions();
options.UseFlatBlobListing=true;
var listblob=container.listblob(选项);
var latestFolderAzure=listblob.OfType().OrderBy(b=>b.Properties.lastModifiedUC).LastOrDefault()?.Parent.Uri.AbsoluteUri;

根据@Ivan Yang的线索,我找到了答案

线索是使用BlobRequest选项。这对我来说很有用

StorageCredentialsAccountAndKey credentials = new StorageCredentialsAccountAndKey(accountName, accessKey);

        CloudStorageAccount acc = new CloudStorageAccount(credentials, true);

        CloudBlobClient client = acc.CreateCloudBlobClient();
        CloudBlobDirectory container = client.GetBlobDirectoryReference(@"MyReport/Test");

        BlobRequestOptions options = new BlobRequestOptions();
        options.UseFlatBlobListing = true;
        var listblob = container.ListBlobs(options);

        var latestFolderAzure = listblob.OfType<CloudBlob>().OrderBy(b => b.Properties.LastModifiedUtc).LastOrDefault()?.Parent.Uri.AbsoluteUri;
StorageCredentialsAccountAndKey凭据=新的StorageCredentialsAccountAndKey(accountName,accessKey);
CloudStorageAccount acc=新的CloudStorageAccount(凭据,true);
CloudBlobClient=acc.CreateCloudBlobClient();
CloudBlobDirectoryContainer=client.GetBlobDirectoryReference(@“MyReport/Test”);
BlobRequestOptions options=新的BlobRequestOptions();
options.UseFlatBlobListing=true;
var listblob=container.listblob(选项);
var latestFolderAzure=listblob.OfType().OrderBy(b=>b.Properties.lastModifiedUC).LastOrDefault()?.Parent.Uri.AbsoluteUri;


因此,Azure Blob存储中没有文件夹。它们只是blob前缀,是blob名称的一部分。@GauravMantri那么如何在azure上下文中获取最新的blob前缀?您在命名blob时遵循的是一种模式吗?@GauravMantri是的,我遵循的是类似DDMMYYYHHMM BuildVersion的模式。BuildVersion是类似于“1.4.2.123”的字符串。但我认为很难按ITA排序,因为Azure Blob存储中没有文件夹。它们只是blob前缀,是blob名称的一部分。@GauravMantri那么如何在azure上下文中获取最新的blob前缀?您在命名blob时遵循的是一种模式吗?@GauravMantri是的,我遵循的是类似DDMMYYYHHMM BuildVersion的模式。BuildVersion是类似于“1.4.2.123”的字符串。但我认为很难按它排序,但我正在搜索最新的cloudblob目录,我希望lastmodified用于cloudblob前缀,而不是cloudblob。我有一个名为“MyReport”的容器,在这个容器中我有两个名为“Test”和“Prod”的文件夹。在这些文件夹中,我有很多子文件夹,我想得到lastmodified子文件夹。@James,如果是这样的话,你可以得到最后一个修改过的blob。在blob名称中,您可以获取文件夹(文件夹名称和文件名由blob名称组成)。由于没有LastModified属性,因此如何获取它我的文件夹名称类似于ddmmyyyyhhmm-1.3.5.2。。。稍后会有更多类似DDMMYYYYHHMM-1.3.6.1的文件夹。。。基本上,我在ddmmyyyyhhmm buildnumberb中创建文件夹,但我正在搜索最新的cloudblob目录\u我希望lastmodified为cloudblob前缀,而不是cloudblob。我有一个名为“MyReport”的容器,在这个容器中我有两个名为“Test”和“Prod”的文件夹。在这些文件夹中,我有很多子文件夹,我想得到lastmodified子文件夹。@James,如果是这样的话,你可以得到最后一个修改过的blob。在blob名称中,您可以获取文件夹(文件夹名称和文件名由blob名称组成)。由于没有LastModified属性,因此如何获取它我的文件夹名称类似于ddmmyyyyhhmm-1.3.5.2。。。稍后会有更多类似DDMMYYYYHHMM-1.3.6.1的文件夹。。。基本上,我在DDMMYYYHHMM BuildNumber中创建文件夹