Краткое руководство: перемещаемые данные приложения (HTML)

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

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

Регистрация для получения уведомлений об изменении перемещаемых данных

В следующем примере datachangeHandler определяется как обработчик изменений перемещаемых данных.


var applicationData = Windows.Storage.ApplicationData.current;
 
function initialize() 
{
    applicationData.addEventListener("datachanged", datachangeHandler);
}

function dataChangeHandler(eventArgs)
{
    // TODO: Refresh your data
}

Получение контейнеров для параметров и файлов приложения

Используйте свойство ApplicationData.roamingSettings для получения параметров, а свойство ApplicationData.roamingFolder для получения файлов.

var roamingSettings = applicationData.roamingSettings;
var roamingFolder = applicationData.roamingFolder;

Переменные roamingSettings и roamingFolder из этого шага используются в следующих действиях.

Запись данных в параметр

Используйте свойство ApplicationDataContainer.values для доступа к параметрам в контейнере roamingSettings, полученном на предыдущем шаге. В следующем примере создается параметр exampleSetting и параметр HighPriority, который лучше всего подходит для передачи срочной информации, например информации о состоянии приложения.

// Simple setting

roamingSettings.values["exampleSetting"] = "Hello World";
// High Priority setting, for example, last page position in book reader app

roamingSettings.values["HighPriority"] = "65";

Объект ApplicationDataCompositeValue содержит параметры, доступ к которым должен быть автоматическим. В следующем примере составной параметр с именем exampleCompositeSetting создается и добавляется в контейнер roamingSettings.

// Composite setting

var composite = new Windows.Storage.ApplicationDataCompositeValue();
composite["intVal"] = 1;
composite["strVal"] = "string";

roamingSettings.values["exampleCompositeSetting"] = composite;

Вызовите метод ApplicationDataContainer.CreateContainer, чтобы создать контейнер параметров. В следующем примере создается контейнер параметров с именем exampleContainer и добавляется параметр с именем exampleSetting. Значение Always из перечисления ApplicationDataCreateDisposition показывает, что если контейнер не существует, он создается.

После изменения параметра в хранилище перемещаемых данных приложения операционная система отправляет событие datachanged.

// Setting in a container

var container = roamingSettings.createContainer("exampleContainer", 
                                                Windows.Storage.ApplicationDataCreateDisposition.Always);

if (roamingSettings.containers.hasKey("exampleContainer"))
{
    roamingSettings.containers.lookup("exampleContainer").values["exampleSetting"] = "Hello World";
}

Чтение данных из параметра

Используйте свойство ApplicationDataContainer.values для доступа к параметру exampleSetting в контейнере roamingSettings.

// Simple setting

var value = roamingSettings.values["exampleSetting"];
        
if (!value)
{
    // No data
}
else
{
    // Access data in value
}

Используйте свойство ApplicationDataContainer.values для доступа к параметру exampleCompositeSetting в контейнере roamingSettings.

// Composite setting

var composite = roamingSettings.values["exampleCompositeSetting"];

if (!composite)
{
    // No data
}
else
{
    // Access data in composite["intVal"] and composite["strVal"]
}

Используйте свойство ApplicationDataContainer.values для доступа к параметру exampleSetting в контейнере exampleContainer.

// Setting in a container

var hasContainer = roamingSettings.containers.hasKey("exampleContainer");

if (hasContainer)
{
    // Access data in roamingSettings.containers.lookup("exampleContainer").values.hasKey("exampleSetting");
}

Запись данных в файл

Для создания и обновления файла в хранилище данных перемещаемого приложения используйте файловые API, такие как Windows.Storage.StorageFolder.createFileAsync и Windows.Storage.FileIO.writeTextAsync. В следующем примере создается файл с именем dataFile.txt в контейнере roamingFolder и в этот файл записываются текущие дата и время. Значение replaceExisting из перечисления CreationCollisionOption показывает, что если файл уже существует, его следует заменить.

function writeTimestamp() {
   roamingFolder.createFileAsync("dataFile.txt", Windows.Storage.CreationCollisionOption.replaceExisting)
      .then(function (sampleFile) {
         var formatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longtime");
         var timestamp = formatter.format(new Date());

         return Windows.Storage.FileIO.writeTextAsync(sampleFile, timestamp);
      }).done(function () {      
      });
}

Чтение данных из файла

Для открытия и чтения файла в хранилище данных перемещаемого приложения используйте файловые API, такие как Windows.Storage.StorageFolder.getFileAsync, Windows.Storage.StorageFile.GetFileFromApplicationUriAsync и Windows.Storage.FileIO.readTextAsync. В следующем примере открывается файл dataFile.txt, созданный на предыдущем шаге, и из него считывается дата. Значение openIfExists из перечисления CreationCollisionOption показывает, что файл должен существовать. Дополнительные сведения о загрузке файловых ресурсов из различных расположений см. в разделе Загрузка файловых ресурсов.

function readTimestamp() {
   roamingFolder.getFileAsync("dataFile.txt")
      .then(function (sampleFile) {
         return Windows.Storage.FileIO.readTextAsync(sampleFile);
      }).done(function (timestamp) {
         // Data is contained in timestamp
      }, function () {
         // Timestamp not found
      });
}

Удаление параметров по завершении их использования

Вызовите метод ApplicationDataContainerSettings.remove для удаления параметра exampleSetting из контейнера roamingSettings по завершении его использования.

// Simple setting

roamingSettings.values.remove("exampleSetting");

Вызовите метод ApplicationDataCompositeValue.remove для удаления составного параметра exampleCompositeSetting из контейнера roamingSettings по завершении его использования.

// Delete composite setting

roamingSettings.values.remove("exampleCompositeSetting");

Вызовите метод ApplicationDataContainer.deleteContainer для удаления контейнера параметров exampleContainer по завершении его использования.

// Delete container

roamingSettings.deleteContainer("exampleContainer");

Замечания

Каждое приложение имеет квоту на перемещаемые данные. Чтобы узнать общий разрешенный размер перемещаемых данных, проверьте свойство ApplicationData.roamingStorageQuota. Если объем перемещаемых данных превышает квоту, данные не будут перемещаться до тех пор, пока их размер снова не станет меньше квоты.

Связанные разделы

Задача

Загрузка файловых ресурсов

Краткое руководство: локальные данные приложения

Краткое руководство: временные данные приложения

Понятия

Доступ к данным приложения с помощью среды выполнения Windows

Рекомендации

Руководство по перемещению данных приложения

Ссылки

Windows.Storage.ApplicationData

Windows.Storage.ApplicationDataCompositeValue

Windows.Storage.ApplicationDataContainer

Windows.Storage.ApplicationDataContainerSettings

Примеры

Пример данных приложения