文件处理详细信息

[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]

了解如何向在 Windows 8.1 上运行的使用 JavaScript 的 Windows 应用商店应用添加文件处理功能。

本主题的每个部分都将介绍一项关键文件处理功能、链接到提供了有关该 功能的详细信息的主题,并提供有关在本主题文件处理详细信息随行示例中快速查找相关代码的信息。

注意  很多用来与文件夹和文件交互的函数都是异步函数。你可以在 使用 JavaScript 异步编程中了解 如何编写异步 JavaScript 应用。

 

文件访问基本操作:枚举、获取属性和读写数据

步骤图标 快速入门:通过编程方式访问文件

你可以在诸如文件夹、库、设备的位置或网络位置访问文件,仅需单行代码—调用 StorageFolder.getFilesAsync 函数。请参阅 通过编程方式访问文件 以获取分步说明,用于展示如何执行枚举特定位置的顶层 文件和文件夹以及在某个位置中查询文件等任务。

这些步骤将向你显示如何枚举特定位置的文件:

  1. 获取 用于所需位置的 StorageFolder 对象。例如,你可以通过引用一个静态 KnownFolders 属性(例如 KnowFolders.picturesLibrary)来实现该目的。
  2. 调用返回的 StorageFolder 对象的 StorageFolder.getFilesAsync 函数。本主题的随附示例将调用该方法(不包含参数),以指示应返回所有文件。要查看通过查询调用 StorageFolder.getFilesAsync 的示例,请参阅 快速入门:以编程方式访问文件
  3. 完成 StorageFolder.getFilesAsync 函数后,你可以使用 forEach 循环来循环访问每个返回的文件。

该代码示例枚举了图片库中的所有文件。


// Get a StorageFolder object representing Pictures.
var library = Windows.Storage.KnownFolders.picturesLibrary;

// Get all files from the StorageFolder object.
library.getFilesAsync().then(function (files) {
    // For each file found ...
    files.forEach(function (file) {
        // ... perform your processing.
        });
    });
}

来自随行示例的该屏幕截图显示了在图片库中枚举文件的示例。

在图片库中枚举文件的文件处理示例屏幕截图。

在示例中查找它:该示例包括标题为 “FileAccessBasics”的页面,该页面包含了在此部分中展示的示例。相关的 JavaScript 和 HTML 代码集中到 FileAccessBasicsPage.js (OnEnumPicturesClick 函数)和 FileAccessBasicsPage.html 文件。

步骤图标

快速入门:获取文件属性

文件属性可描述或确定文件或其内容的属性。例如,文件 属性包括诸如文件名、路径、文件大小、文件属性、上次访问的日期等数据。 快速入门:获取文件属性显示了如何检索和显示文件的顶层和基本属性。

以下步骤向你显示了如何获取顶层或基本文件属性:

该代码示例将枚举图片库中的所有文件,并显示各种顶层和基本文件属性。请注意 JavaScript promises 如何用于同步两个异步操作(StorageFolder.getFilesAsyncStorageFile.getBasicPropertiesAsync)的结果。要了解异步编程和 JavaScript 中 promises 的详细信息,请参阅 JavaScript 中的异步编程


// Get a StorageFolder object representing the Pictures Library.
var library = Windows.Storage.KnownFolders.picturesLibrary;

// Initialize string that holds all property information.
var outString = "";

// Get all files from the StorageFolder object.
library.getFilesAsync().then(function (files) {
    var promises = [];
    files.forEach(function (file) {
        promises.push(WinJS.Promise.as(file));
        promises.push(file.getBasicPropertiesAsync());
    })
    return WinJS.Promise.join(promises);
})
.done(function (results) {
    var counter = 0

    while (counter < results.length) {
        var file = results[counter];
        var props = results[counter + 1];
        outString += "File name: " + file.name + "<br/>";
        outString += "File type: " + file.fileType + "<br/>";
        outString += "File size: " + props.size + "<br/>";
        outString += "<br/>"
        counter = counter + 2;
    }
});

来自随行示例的该屏幕截图显示了关于获取各种顶层和基本文件属性的示例。

获取文件属性的文件处理示例屏幕截图。

在示例中查找它:该示例包括标题为 “FileAccessBasics”的页面,该页面包含了在此部分中展示的示例。相关的 JavaScript 和 HTML 代码集中到 FileAccessBasicsPage.js (OnGetFilePropertiesClick 函数)和 FileAccessBasicsPage.html 文件。

步骤图标

快速入门:读取和写入文件

Windows 应用商店应用通过 FileIO 类读取和写入文件。请参阅 快速入门:读取和写入文件 以获取可展示如何使用 FileIOStorageFile 类读取和写入各种数据类型的代码示例。

Dn595121.wedge(zh-cn,WIN.10).gif将文本写入文件

  1. 若要写入文件,你首先必须获取 StorageFile 对象以传递到一个用于写入数据的 FileIO 函数。在随附的示例中,通过利用 StorageFolder.createFileAsync 函数创建文件完成了该操作。
  2. 在你具有 StorageFile 对象后,你可以通过一个重载的 FileIO.writeTextAsync 函数将文本写入它的基础文件。
该代码示例将当前日期/时间写入示例文件中。

// Create the sample file; replacing it if it already exists.
var lib = Windows.Storage.KnownFolders.picturesLibrary;
lib.createFileAsync("FileHandlingJs.txt", 
    Windows.Storage.CreationCollisionOption.replaceExisting)
.then(function (file) {
    if (file) {
        // Format a string based on the current data/time.
        var now = new Date();
        var sampleFileContents = 
            [[now.getMonth() + 1, now.getDate(), now.getFullYear()].join("/"),
            [now.getHours(), AddZero(now.getMinutes())].join(":"),
            now.getHours() >= 12 ? "PM" : "AM"].join(" ");

        // Write the text to the sample file.
        Windows.Storage.FileIO.writeTextAsync(file, sampleFileContents)
        .then(function () {
            // File's contents have been written at this point.
        }, 
        function (error) {
            // Handle error.
        });
    }
});

Dn595121.wedge(zh-cn,WIN.10).gif从文件读取文本

  1. 若要读取文件内容,你首先必须获取 StorageFile 对象以传递到一个用于读取数据的 FileIO 函数。在随附的示例中,通过调用 StorageFolder.getFileAsync 函数完成了该操作。
  2. 在你具有 StorageFile 对象后,你可以通过一个重载的 FileIO.readTextAsync 函数从它的基础文件读取文本。
该代码示例将从示例文件中读取内容。

// Open sample file.
Windows.Storage.KnownFolders.picturesLibrary.getFileAsync("FileHandlingJs.txt")
.then(function (file) {
    // If file found ...
    if (file) {
        // Read file's contents.
        Windows.Storage.FileIO.readTextAsync(file).then(function (contents) {
            // Process file contents as needed.
        });
    }
}, function (error) {
    // Handle error.
});

该屏幕截图显示了关于运行示例和写入示例文件的示例。

将文本数据写入文件的文件处理示例屏幕截图。

在示例中查找它:该示例包括标题为 “FileAccessBasics”的页面,该页面包含了在此部分中展示的示例。相关的 JavaScript 和 HTML 代码集中到 FileAccessBasicsPage.js (OnWriteTextToFileClickOnReadTextFromFileClick 函数)和 FileAccessBasicsPage.html 文件。

 

处理文件和文件夹选取器

步骤图标

快速入门:利用文件选取器访问文件

选取器(文件选取器和文件夹选取器)用于显示文件或文件夹列表,用户可以从中 选择一个或多个项目以进一步处理。可以通过编程方式配置选取器来搜索 匹配指定筛选器的文件和文件夹(例如具有特定扩展名的文件)、从特定 文件夹开始、显示特定视图模式(列表或缩略图)等。

以下过程将向你显示如何配置用于单个文件、多文件和单个文件夹选择的各种选取器。

Dn595121.wedge(zh-cn,WIN.10).gif配置单个文件选择文件选取器

  1. 实例化 FileOpenPicker 对象。
  2. 根据需要,设置 FileOpenPicker 对象的 viewModesuggestedStartLocationfileTypeFilter 属性。
  3. 调用 FileOpenPicker.pickSingleFileAsync 函数。当完成 FileOpenPicker.pickSingleFileAsync 函数时,应用将具有对选定文件的读/写权限。
该代码示例将实例化和显示用于单个文件选择操作的文件选取器。

// Instantiate a FileOpenPicker object.
var openPicker = new Windows.Storage.Pickers.FileOpenPicker();

// Set the FileOpenPicker object's key properties.
openPicker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;

openPicker.suggestedStartLocation = 
    Windows.Storage.Pickers.PickerLocationId.picturesLibrary;

openPicker.fileTypeFilter.replaceAll([".jpg", ".jpeg", ".png" ]);

// Display the FileOpenPicker for single file selection.
openPicker.pickSingleFileAsync().then(function (file) {
    // If the user selected a file ...
    if (file) {
        // ... process file as needed.
    }
    else {
        // User canceled the operation.
    }
});

Dn595121.wedge(zh-cn,WIN.10).gif配置多文件选择文件选取器

  1. 实例化 FileOpenPicker 对象。
  2. 根据需要,设置 FileOpenPicker 对象的 FileOpenPicker.viewModeFileOpenPicker.suggestedStartLocationFileOpenPicker.FileTypeFilter 属性。
  3. 调用 FileOpenPicker.pickMultipleFileAsync 函数。当完成 FileOpenPicker.pickMultipleFileAsync 函数时,应用将具有对选定文件的读/写权限。选定的文件通过一组 StorageFile 对象表示。该数组的 sizes 属性会告诉你选择的文件数量,以便你使用具有标准数组表示法的 for 循环访问每个 StorageFile 对象。
该代码示例将实例化和显示用于多文件选择操作的文件选取器。

// Instantiate a FileOpenPicker object.
var openPicker = new Windows.Storage.Pickers.FileOpenPicker();

// Set the FileOpenPicker object's key properties.
openPicker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;

openPicker.suggestedStartLocation = 
    Windows.Storage.Pickers.PickerLocationId.picturesLibrary;

openPicker.fileTypeFilter.replaceAll([".jpg", ".jpeg", ".png"]);

// Display the FileOpenPicker for multiple-file selection.
openPicker.pickMultipleFilesAsync().then(function (files) {
    // If the user selected at least one file ...
    if (files.size > 0) {
        for (var i = 0; i < files.size; i++) {
            // ... process each file - For example, files[i]
        }
    }
    else {
        // User canceled the operation.
    }
});

Dn595121.wedge(zh-cn,WIN.10).gif配置文件夹选取器

  1. 实例化 FolderPicker 对象。
  2. 根据需要,设置 FolderPicker 对象的 FolderPicker.viewModeFolderPicker.suggestedStartLocationFolderPicker.fileTypeFilter 属性。
  3. 调用 FileOpenPicker.pickSingleFileAsync 函数。当完成 FolderPicker.pickSingleFolderAsync 函数时,应用将具有对选定文件夹(包括子文件夹)的读/写权限。
该代码示例将实例化和显示文件夹选取器。

// Instantiate a FolderPicker object.
var folderPicker = new Windows.Storage.Pickers.FolderPicker();

// Set the FileOpenPicker object's key properties.
folderPicker.suggestedStartLocation = 
    Windows.Storage.Pickers.PickerLocationId.desktop;
folderPicker.fileTypeFilter.replaceAll([".docx", ".xlsx", ".pptx"]);

// Display the FolderPicker for folder selection.
folderPicker.pickSingleFolderAsync().then(function (folder) {
    // If the user selected a folder ...
    if (folder) {
        // ... get the folder object.
        Windows.Storage.AccessCache.StorageApplicationPermissions.
        futureAccessList.addOrReplace("PickedFolderToken", folder);
        // Process folder as needed.
    }
    else {
        // User canceled operation.
    }
});

该屏幕截图显示了运行示例和选择两个文件(sample1.png 和 sample2.png)的结果。

使用文件和文件夹选取器的文件处理示例屏幕截图。

在示例中查找它:该示例包括标题为 “文件和文件夹选取器”的页面,该页面演示了本部分概述的任务。用于该示例的 JavaScript 代码和 HTML 分别位于 FilePickerPage.js 和 FilePickerPage.html 文件中。

 

处理 OneDrive 文件

步骤图标

快速入门:确定 OneDrive 文件的可用性

Windows 8.1 使用户可以将 OneDrive 文件标记为仅联机使用。当用户从 OneDrive 断开连接时,这些文件将不可用。为了帮助你通过编程方式确定某个文件的可用性,提供了称为 StorageFile.isAvailable 的新属性。

这些步骤向你显示如何使用 StorageFile.isAvailable 属性确定文件可用性。

  1. 获取 用于所需位置的 StorageFolder 对象。例如,你可以通过引用一个静态 KnownFolders 属性(例如 KnowFolders.picturesLibrary)来实现该目的。
  2. 调用返回的 StorageFolder 对象的 StorageFolder.getFilesAsync 函数。本主题的随附示例将调用该方法(不包含参数),以指示应返回所有文件。要查看通过查询调用 StorageFolder.getFilesAsync 的示例,请参阅 快速入门:以编程方式访问文件
  3. 完成 StorageFolder.getFilesAsync 函数后,你可以使用 forEach 循环来循环访问每个返回的文件。
该代码示例可枚举图片库中的所有文件,并显示每个文件的名称、提供商名称以及可用性。

// Get a StorageFolder object representing Pictures.
var library = Windows.Storage.KnownFolders.picturesLibrary;

// Initialize string that will contain the file name, provider name, 
// and availability for each file.
var outString = "";

// Get all files from the StorageFolder object.
library.getFilesAsync().then(function (files) {
    // For each file found ...
    files.forEach(function (file) {
        // Retrieve the file's name, provider name, and availability.
        outString += file.name 
                  + " (on " 
                  + file.provider.displayName 
                  + ") is " 
                  + (file.isAvailable ? "available" : "not available") + "\n";
    });
});

该屏幕截图显示了检查图片库中文件可用性的示例结果。

处理 OneDrive 文件的文件处理示例屏幕截图。

在示例中查找它:该示例包括标题为 "OneDriveFilesPage"的页面,该页面具有一个可在本地计算机的图片库中枚举所有文件的按钮。每个文件名都与该文件的提供程序(例如,本电脑或 OneDrive) 及其当前可用性一起显示。用于该示例的 JavaScript 代码和 HTML 分别位于 OneDriveFilesPage.js 和 OneDriveFilesPage.html 文件中。

 

整理

应用商店要求图标

使用 Windows 应用认证工具包

建议。运行 Windows 应用认证工具包有助于确保你的应用满足 Windows 应用商店要求。我们建议你在将主要功能添加到应用时,运行该工具包。

停止图标

完成了!现在,你已了解应用的其他文件处理功能,你已准备好 创建类似于文件处理详细信息随行示例的应用。

 

想要了解详细信息?

快速入门:使用 JavaScript 异步编程

了解有关使用 JavaScript 异步编程的详细信息。

快速入门:通过编程方式访问文件

了解有关枚举文件的详细信息。

快速入门:读取和写入文件

了解有关读取和写入文件的详细信息。