快速入门:漫游应用数据 (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;

后面的步骤将使用此步骤中的 roamingSettingsroamingFolder 变量。

将数据写入设置

使用 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 的设置。ApplicationDataCreateDisposition 枚举中的 Always 值指示创建容器(如果尚不存在的话)。

更改漫游应用数据存储中的设置后,操作系统会发送 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 属性可以访问 roamingSettings 容器中的 exampleSetting 设置。

// Simple setting

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

使用 ApplicationDataContainer.values 属性可以访问 roamingSettings 容器中的 exampleCompositeSetting 设置。

// Composite setting

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

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

使用 ApplicationDataContainer.values 属性可以访问 exampleContainer 容器中的 exampleSetting 设置。

// 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.createFileAsyncWindows.Storage.FileIO.writeTextAsync)在漫游应用数据存储中创建和更新文件。此示例会在 roamingFolder 容器中创建一个名为 dataFile.txt 的文件并将当前日期和时间写入该文件中。CreationCollisionOption 枚举中的 replaceExisting 值指示替换该文件(如果存在的话)。

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.getFileAsyncWindows.Storage.StorageFile.GetFileFromApplicationUriAsyncWindows.Storage.FileIO.readTextAsync)在漫游应用数据存储中打开和读取文件。此示例打开在上一步中创建的 dataFile.txt 文件并从该文件中读取日期。CreationCollisionOption 枚举中的 openIfExists 值指示该文件必须存在。有关从多个位置加载文件资源的详细信息,请参阅如何加载文件资源

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

示例

应用数据示例