获取按上次修改日期排序的StorageFile列表

Fis*_*ake 1 c# windows-store-apps windows-8.1

我正在努力完成一项非常简单的任务,即StorageFileStorageFolder修改日期的降序中获取列表.

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

                Task<IReadOnlyList<StorageFile>> task = folder.Result.GetFilesAsync().AsTask();
                task.Wait();
                return task.Result.Select(z => z.Name).ToArray();
Run Code Online (Sandbox Code Playgroud)

StorageFile有一个属性,DateCreated但与DateModified没有任何相似之处.

我查看了使用,GetFilesAsync(Windows.Storage.Search.CommonFileQuery.OrderByDate)但这仅适用于Windows库中的文件.

Kra*_*SFT 7

在WinRT中,您需要调用StorageFile.GetBasicPropertiesAsync.您将获得的BasicProperties对象具有dateModified属性,您可以将其用于排序.您可以在文件访问示例的方案6中找到代码段.

您还可以使用自定义文件查询而不是常见查询来实现目标.为此,我建议查看Programmatic文件搜索示例,我将在我的免费电子书第11章中讨论这些内容,使用HTML,CSS和JavaScript编写Windows应用程序应用程序,第2版(不要让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);
Run Code Online (Sandbox Code Playgroud)

在您的代码中,只需调用folder.CreateFileQueryWithOptions(queryOptions),然后调用queryResult.GetFilesAsync,结果列表应该正是您想要的.

StorageFileQueryResult queryResult = folder.CreateFileQueryWithOptions(queryOptions);
IReadOnlyList<StorageFile> files = await queryResult.GetFilesAsync();
Run Code Online (Sandbox Code Playgroud)