C# 如何使用IListFileItem在属性上使用OrderByDescending?

C# 如何使用IListFileItem在属性上使用OrderByDescending?,c#,azure,azure-storage,azure-storage-files,C#,Azure,Azure Storage,Azure Storage Files,我有以下代码,它将返回特定azure存储路径的所有列表项、文件和文件夹 我想根据属性LastModified使用OrderByDescending对其进行筛选 如何做到这一点 // Get list of all files/directories on the file share CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["sto

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

我想根据属性LastModified使用OrderByDescending对其进行筛选

如何做到这一点

 // 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来代替Uri.AbsolutePath。

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

    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);
            }
        }
    }

但就我所见,IListFileItem没有LastModified属性…是的,看起来您试图将其视为来自本地文件系统的内容。请尝试将其强制转换为CloudFile这包含您要查找的属性:@VisualBean So。。。有一个答案…我试着用cast仍然它的空更新问题请检查,但我不想添加所有文件夹中的所有文件。我只想添加那些来自最新文件夹的文件。例如-文件夹是Main/12 Main/13 Main/14,而我只需要Main/14中的文件,并将检查此文件夹中的最新文件。因为所有文件夹中的所有文件都会花费更多的时间,因为我有数千个文件。我想我们可以使用OrderByDestinging=>t.Uri.AbsolutePath转到Main/14文件夹,然后添加Main/14中的所有文件,并使用LastModified属性对其进行描述?如何在你的ans代码中使用它?你能帮忙吗?@Neo当然,但我有几个问题。如何判断哪个文件夹是最新的,只是文件夹名称,如绝对路径或修改时间?如果是修改时间,最新文件夹位于何处,就在共享根目录下还是在子文件夹中?@Neo感谢您接受我的回答,我有一些建议。您的答案代码是检测1.root中的所有文件,即sourcename dir 2中的所有文件。每个级别的最新子目录。所以您计划只检查最新目录中的文件,以查找最后修改的文件,对吗?但有一个问题,当我们在一个目录中更新/修改/删除一个文件时,目录的上次修改时间并没有像文件一样改变。如果该文件上载到用该文件创建的新目录,您的代码应该可以工作,否则您可能会错过真正的最新文件,在这种情况下,我认为我们需要获取目录中的所有文件。@Neo可能是出于设计,看起来只有对文件夹本身的操作才能更新修改的时间。有人问。
    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);
            }
        }
    }
 public static void CheckDate()
        {
            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 latestFile = (from file in filedataList
                              orderby file.Properties.LastModified descending
                              select file).FirstOrDefault();

            Console.WriteLine(" LastModified Datetime - " + latestFile.Properties.LastModified.Value.DateTime);

        }

        public static void listFile(IEnumerable<IListFileItem> results)
        {
            foreach (var item in results)
            {
                if (item.GetType() == typeof(CloudFileDirectory))
                {
                    CloudFileDirectory dir = (CloudFileDirectory)item;
                    dir.FetchAttributes();
                    dirList.Add(dir);
                }
                else
                {
                    CloudFile file = (CloudFile)item;
                    file.FetchAttributes();
                    filedataList.Add(file);
                }
            }
            if (dirList.Count > 0)
            {
                var latestDir = (from dir in dirList
                                 orderby dir.Properties.LastModified descending
                                 select dir).FirstOrDefault();
                dirList.Clear();
                var result = latestDir.ListFilesAndDirectories();
                listFile(result);
            }
        }