Как использовать OrderByDescending для свойств с помощью IListFileItem? - PullRequest
0 голосов
/ 28 августа 2018

У меня следующий код, который будет возвращать все элементы списка (файлы и папки) определенного заданного пути хранения 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.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018
 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);
            }
        }
0 голосов
/ 28 августа 2018

Попробуйте следующий код. Сначала нужно получить все файлы, поскольку 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);
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...