获取按最后修改日期排序的 StorageFile 列表

Get List of StorageFile ordered by last modified date

我正在尝试完成一项本应非常简单的任务,即从 StorageFolder 中按修改日期的降序获取 StorageFile 的列表。

检索列表但未排序的当前代码

                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 库中的文件。

在 WinRT 中,您需要调用 StorageFile.GetBasicPropertiesAsync. The BasicProperties object you'll get back has a dateModified property that you can use for your sort. You can find code snippets in scenario 6 of the File access sample

您还可以使用自定义文件查询而不是常见查询之一来实现您的目标。为此,我建议查看 Programmatic file search sample, and I discuss these in Chapter 11 of my free ebook, 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();