Обработка файлов от начала до конца

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Узнайте, как добавить возможности обработки файлов в приложение Магазина Windows на JavaScript, работающее в Windows 8.1.

В каждом разделе этой статьи описан важный компонент обработки файлов, приведена ссылка на статью с более подробной информацией об этом компоненте и даны инструкции, как быстро найти нужный код в сопутствующем примере обработки файлов от начала до конца этой статьи.

Примечание  Многие функции, используемые для взаимодействия с папками и файлами, являются асинхронными. Информацию о создании асинхронных приложений на JavaScript см. в разделе Асинхронное программирование на JavaScript.

 

Основы доступа к файлам — перечисление, получение свойств, чтение и запись данных

значок шага Краткое руководство: доступ к файлам программными средствами

Вы можете получить доступ к файлам в расположении, например в папке, библиотеке, на устройстве или в сетевом расположении, с помощью всего одной строки кода — вызова функции StorageFolder.getFilesAsync. В разделе Доступ к файлам программными средствами содержатся пошаговые инструкции по выполнению таких задач, как перечисление файлов и папок верхнего уровня в указанном расположении и запрос файлов в расположении.

Далее показано, как перечислить файлы в определенном расположении.

  1. Получите объект StorageFolder для нужного расположения. Например, для этого можно создать ссылку на одно из статических свойств KnownFolders, такое как KnowFolders.picturesLibrary.
  2. Вызовите функцию StorageFolder.getFilesAsync возвращенного объекта StorageFolder. В сопутствующем примере этого раздела данный метод вызывается без параметров (это указывает, что должны быть возвращены все файлы). Примеры вызова метода 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.

значок шага

Краткое руководство: получение свойств файла

Свойства файла описывают или оценивают атрибут файла или его содержимое. Например, к свойствам файла относятся такие данные, как имя файла, путь, размер файла, атрибуты файла и дата последнего доступа. В разделе Краткое руководство: получение свойств файла показано, как получать и отображать свойства верхнего уровня и основные свойства файла.

Эти шаги показывают, как получать свойства верхнего уровня или основные свойства файла:

В этом примере кода перечисляются все файлы в библиотеке изображений и отображаются различные свойства верхнего уровня и основные свойства файла. Обратите внимание, как используются объекты promises JavaScript для синхронизации результатов двух асинхронных операций (StorageFolder.getFilesAsync и StorageFile.getBasicPropertiesAsync). Подробнее об асинхронном программировании и promises в JavaScript: Асинхронное программирование на 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. Раздел Краткое руководство: чтение и запись файла содержит примеры кода, в которых показаны способы чтения и записи различных типов данных при помощи классов FileIO и StorageFile.

Dn595121.wedge(ru-ru,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(ru-ru,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 (функции OnWriteTextToFileClick и OnReadTextFromFileClick) и FileAccessBasicsPage.html.

 

Работа со средствами выбора файлов и папок

значок шага

Краткое руководство: доступ к файлам с помощью средств выбора файлов

Средства выбора — как файлов, так и папок — используются для отображения списка файлов или папок, из которого пользователи могут выбрать один или несколько элементов для дальнейшей обработки. Средства выбора можно настроить программным способом, чтобы выполнять поиск файлов и папок, соответствующих условиям указанного фильтра (например, файлов с конкретными расширениями), чтобы начать работу с определенной папки, чтобы отобразить определенный режим просмотра (список или эскизы) и для многих других целей.

Далее показано, как настраивать различные средства выбора одного файла, нескольких файлов и одной папки.

Dn595121.wedge(ru-ru,WIN.10).gifНастройка средства выбора одного файла

  1. Создайте экземпляр объекта FileOpenPicker.
  2. Настройте свойства viewMode, suggestedStartLocation и fileTypeFilter объекта FileOpenPicker нужным образом.
  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(ru-ru,WIN.10).gifНастройка средства выбора нескольких файлов

  1. Создайте экземпляр объекта FileOpenPicker.
  2. Настройте свойства FileOpenPicker.viewMode, FileOpenPicker.suggestedStartLocation и FileOpenPicker.FileTypeFilter объекта FileOpenPicker нужным образом.
  3. Вызовите функцию FileOpenPicker.pickMultipleFileAsync. По завершении выполнения функции FileOpenPicker.pickMultipleFileAsync приложение получит доступ к выбранным файлам для чтения и записи. Выбранные файлы представляются массивом объектов StorageFile. Свойство sizes массива указывает, сколько файлов было выбрано, поэтому для доступа к каждому объекту StorageFile можно использовать цикл for со стандартной нотацией массива.
Этот пример кода создает экземпляр средства выбора файлов для выбора нескольких файлов и отображает его.

// 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(ru-ru,WIN.10).gifНастройка средства выбора папок

  1. Создайте экземпляр объекта FolderPicker.
  2. Настройте свойства FolderPicker.viewMode, FolderPicker.suggestedStartLocation и FolderPicker.fileTypeFilter объекта FolderPicker нужным образом.
  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

значок шага

Краткое руководство: определение доступности файлов Microsoft OneDrive

В Windows 8.1 пользователи могут пометить файлы OneDrive как доступные только в сети. Когда пользователь отключен от OneDrive, эти файлы недоступны. Чтобы помочь вам программным способом определить доступность файла, существует новое свойство StorageFile.isAvailable.

Далее показано, как определить доступность файлов при помощи свойства StorageFile.isAvailable.

  1. Получите объект StorageFolder для нужного расположения. Например, для этого можно создать ссылку на одно из статических свойств KnownFolders, такое как KnowFolders.picturesLibrary.
  2. Вызовите функцию StorageFolder.getFilesAsync возвращенного объекта StorageFolder. В сопутствующем примере этого раздела данный метод вызывается без параметров (это указывает, что должны быть возвращены все файлы). Примеры вызова метода 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.

Краткое руководство: доступ к файлам программными средствами

Подробнее о перечислении файлов.

Краткое руководство: чтение и запись файла

Подробнее о чтении и записи файлов.