我正在努力完成一项非常简单的任务,即按照修改日期的降序从StorageFile
获取StorageFolder
列表。
检索列表但未排序的当前代码
Task<IReadOnlyList<StorageFile>> task = folder.Result.GetFilesAsync().AsTask();
task.Wait();
return task.Result.Select(z => z.Name).ToArray();
StorageFile具有DateCreated
的属性,但DateModified没有类似的内容。
我研究过使用GetFilesAsync(Windows.Storage.Search.CommonFileQuery.OrderByDate)
,但这仅适用于Windows库中的文件。
答案 0 :(得分:7)
在WinRT中,您需要致电StorageFile.GetBasicPropertiesAsync。您将获得的BasicProperties对象具有dateModified属性,您可以将其用于排序。您可以在File access sample的方案6中找到代码段。
您还可以使用自定义文件查询而不是常见查询来实现目标。为此,我建议查看Programmatic file search sample,我将在我的免费电子书第11章中讨论这些内容,Programming Windows Store Apps with HTML, CSS, and JavaScript, 2nd Edition(不要让JS专注于欺骗你 - 所有WinRT讨论都是完全的适用于所有语言)。
如果是这种情况,您可以通过初始化常用查询来创建简单的自定义查询,然后更改排序顺序。这是我为此目的对上述样本的方案1所做的修改,取代了第42行:
// initialize queryOptions using a common query
QueryOptions queryOptions = new QueryOptions(CommonFileQuery.DefaultQuery, fileTypeFilter);
// clear all existing sorts
queryOptions.SortOrder.Clear();
// add descending sort by date modified
SortEntry se = new SortEntry();
se.PropertyName = "System.DateModified";
se.AscendingOrder = false;
queryOptions.SortOrder.Add(se);
在你的代码中,只需调用folder.CreateFileQueryWithOptions(queryOptions),然后调用queryResult.GetFilesAsync,结果列表应该是你想要的。
StorageFileQueryResult queryResult = folder.CreateFileQueryWithOptions(queryOptions);
IReadOnlyList<StorageFile> files = await queryResult.GetFilesAsync();