快速入门:通过编程方式访问文件 (HTML)
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
访问位于某个位置(如文件夹、库、设备或网络位置)的文件和文件夹。还可以通过构造文件和文件夹查询来查询某个位置的文件和文件夹。
了解使用 JavaScript 的 Windows 运行时应用的异步编程
在快速入门:在 JavaScript 中使用承诺中了解如何编写异步应用。
对位置的访问权限
例如,这些示例中的代码需要图片库功能,但你的位置可能需要其他功能或根本不需要任何功能。若要了解详细信息,请参阅文件访问和权限。若要了解如何使用文件选取器访问文件和文件夹的信息,请参阅快速入门:使用文件选取器访问文件。
获取表示位置的 StorageFolder。
如果要获取特定文件夹的内容列表,则必须首先获取表示该位置的 StorageFolder 对象。
文件夹枚举示例展示了如何获取图片库:
var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
在前面的示例中,我们使用 KnownFolders 获取图片库(作为 StorageFolder 对象)。可以使用 KnownFolders 属性获取表示某些用户资源(如库、设备或网络位置)的文件夹。
要点 如果希望使用 KnownFolders 属性访问库、设备或网络位置,则应用必须在其应用部件清单中具有相应的功能。要了解有关文件访问和功能的详细信息,请参阅文件访问和权限和使用 Windows 运行时对用户资源的访问。
获取文件夹内容的列表。
文件夹枚举示例展示了如何获取图片库中的项目列表:
picturesLibrary.getItemsAsync().then(function (items) {
如上一示例中所示,可以调用 getItemsAsync() 来获取文件夹的所有内容的列表(StorageFolder 对象)。如果不需要全部项,则可以调用 getItemsAsync(startIndex, maxItemsToRetrieve) 来按索引获取某个范围内的文件夹内容。
在文件夹上调用 getItemsAsync 方法时,会将要接收的项列表限于该文件夹中的文件和子文件夹,且该列表不包括那些子文件夹中包含的所有文件和文件夹。
如果需要文件夹中的文件列表,则可以调用 getFilesAsync 方法。如果需要文件夹列表,则可以调用 getFoldersAsync 方法。
在获取操作之后使用 then 来定义函数,该函数采用接收的对象的列表(上一示例中的
items
),并执行所需的其他任务。使用列表。
文件夹枚举示例展示了如何使用图片库中的
items
列表执行其他任务:outputHeader(picturesLibrary.name, items.size); items.forEach(function (item) { if (item.isOfType(Windows.Storage.StorageItemTypes.folder)) { output(id(picturesLibrary.name), item.name + "\\"); } else { output(id(picturesLibrary.name), item.fileName); } });
上一示例将文件夹的 name 和列表的
size
传递给帮助程序函数,该函数向用户显示此信息。还可以在整个项列表中循环访问来执行其他任务,如上一示例中所示。可以在项列表上调用
forEach
来循环访问列表中的项。传递给forEach
的函数应将项列表视为一个参数,并将对列表中的每个item
执行此函数。可以通过分别在每个
item
上调用方法来处理它们。在上一示例中,我们通过将 isOfType 方法的结果(同时存在于文件和文件夹上)与 StorageItemTypes 枚举值相比较,确定item
是文件夹(StorageFolder 对象)还是文件(StorageFile 对象)。我们使用此比较将关于项的不同信息传递给output
帮助程序函数,但也可以同时执行许多其他任务。要获取更多上下文并查看
outputHeader
和output
函数如何工作,请下载文件夹枚举示例。
完成后,你的代码应类似如下内容:
// Get folder
var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
// Get folder contents
picturesLibrary.getItemsAsync().then(function (items) {
// Then perform tasks with the list of files and folders that was retrieved
// For example, display name of containing folder and count of items in folder
outputHeader(picturesLibrary.name, items.size);
// For example, display info for each item
items.forEach(function (item) {
if (item.isOfType(Windows.Storage.StorageItemTypes.folder)) {
output(id(picturesLibrary.name), item.name + "\\");
}
else {
output(id(picturesLibrary.name), item.fileName);
}
});
});
获取包含文件夹。
如果要获取特定文件夹的内容列表,则必须首先获取该文件夹。
文件夹枚举示例展示了如何获取图片库:
var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
在前面的示例中,我们使用 KnownFolders 获取图片库(作为 StorageFolder 对象)。可以使用 KnownFolders 属性获取表示某些用户资源(如库、设备或网络位置)的文件夹。
要点 如果希望使用 KnownFolders 属性访问库、设备或网络位置,则应用必须在其应用部件清单中具有相应的功能。要了解有关文件访问和功能的详细信息,请参阅文件访问和权限和使用 Windows 运行时对用户资源的访问。
创建文件夹查询以按照你的指定组织文件。
在文件夹中创建文件夹查询,会根据条件将该文件夹中的文件及其子文件夹组织成组。所得结果的组是具有文件系统中文件夹的所有功能的虚拟文件夹,从而允许你根据需要获取和处理其中的文件。
文件夹枚举示例展示了如何创建某个文件夹查询,该查询按拍摄或创建图片的月份对图片库中的图片进行分组:
var query = picturesLibrary.createFolderQuery(Windows.Storage.Search.CommonFolderQuery.groupByMonth);
如上一示例中所示,可以在文件夹上调用 createFolderQuery(query) 以创建文件夹查询(StorageFolderQueryResult 对象),以根据指定的 CommonFolderQuery 值将该文件夹和子文件夹中的文件组织到虚拟文件夹中。在该示例中,我们选择了基于拍摄或创建图片的月份 (CommonFolderQuery.groupByMonth) 将
picturesLibrary
文件夹中的图片文件分组到虚拟文件夹中。也可以通过调用 createFolderQuery() 或 createFolderQueryWithOptions 来创建文件夹查询。
从查询获取虚拟文件夹列表。
应用示例主页上的 FolderEnumeration 示例使用
query
来获取虚拟文件夹列表:query.getFoldersAsync().then(function (monthList) { monthList.forEach(function (month) {
如上一示例所示,可在文件夹查询上调用 getFoldersAsync() 来获取虚拟文件夹列表。使用 then 来定义处理列表的函数。在该示例中,我们的查询返回一个代表月份的虚拟文件夹列表
monthList
,并且我们通过调用monthList.forEach
并定义用于处理每个month
文件夹的函数,来处理我们的列表。获取虚拟文件夹中的文件列表。
文件夹枚举示例展示了如何使用
month
文件夹来获取在该月份内拍摄或创建的图片列表:var tempMonthName = month.name; month.getFilesAsync().then(function (files) {
提示 可能会需要存储关于虚拟文件夹 (
month
) 的信息,以便可以稍后使用该信息。在上一示例中,我们在tempMonthName
中存储了我们的虚拟文件夹 (month
.name) 的名称,以便我们可以在处理我们的图片列表 (files
) 时使用该名称。使用 then 来定义处理接收的文件列表的函数。
完成后,你的代码应类似如下内容:
// Get folder
var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
// Create query
var query = picturesLibrary.createFolderQuery(Windows.Storage.Search.CommonFolderQuery.groupByMonth);
// Get virtual folders from query
query.getFoldersAsync().then(function (monthList) {
monthList.forEach(function (month) {
var tempMonthName = month.name;
// Get files from virtual folder
month.getFilesAsync().then(function (files) {
// Then perform tasks with retrieved files
});
});
});
若要了解读取和写入文件的信息,请参阅快速入门:读取和写入文件和文件访问示例。若要了解使用图像文件的信息,请参阅如何选择和显示图像或如何解码图像以及使用 Blob 保存和加载内容示例。
若要了解如何通过文件选取器访问文件,请参阅快速入门:使用文件选取器访问文件。
参考
Windows.Storage.KnownFolders class
Windows.Storage.StorageFile class
Windows.Storage.StorageFolder class
Windows.Storage.StorageItemTypes enum