首页 > 解决方案 > 如何使用 IListFileItem 在属性上使用 OrderByDescending?

问题描述

我有以下代码,它将返回特定给定 azure 存储路径的所有列表项(文件和文件夹)。

我想OrderByDescending根据属性过滤它LastModified

如何做到这一点?

 // Get list of all files/directories on the file share 
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["storageConnectionString"]);
CloudFileClient fileClient = cloudStorageAccount.CreateCloudFileClient();
CloudFileShare fileShare = fileClient.GetShareReference(ConfigurationManager.AppSettings["shareName"]);

var sourceName = fileShare.GetRootDirectoryReference().GetDirectoryReference((ConfigurationManager.AppSettings["sourceName"]));
IEnumerable<IListFileItem> fileList = sourceName.ListFilesAndDirectories();
var test = (fileList.OrderByDescending(t => t.Uri.AbsolutePath).FirstOrDefault());

我试过铸造但LastModified为空

            fileList.ToList().ForEach(x => ((CloudFileDirectory)x).FetchAttributes());
GetAllSubDir(fileList.OrderByDescending(t => ((CloudFileDirectory)t).Properties.LastModified.Value).FirstOrDefault());

而不是Uri.AbsolutePath我想使用LastModified.

标签: c#azureazure-storageazure-storage-files

解决方案


试试下面的代码。您需要首先获取所有文件,因为 ListFilesAndDirectories 仅返回单个级别的文件和目录。

    List<CloudFile> list = new List<CloudFile>();

    public void Test()
    {
        CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["storageConnectionString"]);
        CloudFileClient fileClient = cloudStorageAccount.CreateCloudFileClient();
        CloudFileShare fileShare = 
        fileClient.GetShareReference(ConfigurationManager.AppSettings["shareName"]);

        var sourceName = fileShare.GetRootDirectoryReference().GetDirectoryReference((ConfigurationManager.AppSettings["sourceName"]));
        IEnumerable<IListFileItem> fileList = sourceName.ListFilesAndDirectories();
        listFile(fileList);

        var test = (from file in list
                      orderby file.Properties.LastModified descending
                      select file).FirstOrDefault();

    }

    // detect all files in the directory
    public void listFile(IEnumerable<IListFileItem> results)
    {
        foreach (IListFileItem fileItem in results)
        {
            if (fileItem.GetType() == typeof(CloudFileDirectory))
            {
                CloudFileDirectory directory = (CloudFileDirectory)fileItem;
                var res = directory.ListFilesAndDirectories();
                listFile(res);
            }
            else
            {
                CloudFile file = (CloudFile)fileItem;
                file.FetchAttributes();
                list.Add(file);
            }
        }
    }

推荐阅读