WP8.1学习系列(第二十一章)——本地应用数据

Applies to Windows and Windows Phone

了解如何存储和检索本地应用数据存储中的设置和文件。

路线图: 本主题与其他主题有何关联?请参阅:

获取应用的设置和文件容器

使用 ApplicationData.LocalSettings 属性可以获取 ApplicationDataContainer 对象中的设置。使用ApplicationData.LocalFolder 属性可以获取 StorageFolder 对象中的文件。

C#
 
Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;

Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;



后面的部分使用此部分中的 localSettings 和 localFolder 变量。

将数据写入设置

使用 ApplicationDataContainer.Values 属性可以访问我们在上一步中获取的 localSettings 容器中的设置。此示例会创建一个名为 exampleSetting 的设置。

C#
// Simple setting



localSettings.Values["exampleSetting"] = "Hello Windows";



ApplicationDataCompositeValue 对象包含必须以原子方式访问的设置。此示例会创建一个名为exampleCompositeSetting 的复合设置并将它添加到 localSettings 容器中。

C#
 
// Composite setting



Windows.Storage.ApplicationDataCompositeValue composite = new Windows.Storage.ApplicationDataCompositeValue();

composite["intVal"] = 1;

composite["strVal"] = "string";



localSettings.Values["exampleCompositeSetting"] = composite;



调用 ApplicationDataContainer.CreateContainer 方法可创建设置容器。此示例创建一个名为exampleContainer 的设置容器并添加一个名为 exampleSetting 的设置。ApplicationDataCreateDisposition枚举中的 Always 值指示创建容器(如果尚不存在的话)。

C#
// Setting in a container



Windows.Storage.ApplicationDataContainer container = 

   localSettings.CreateContainer("exampleContainer", Windows.Storage.ApplicationDataCreateDisposition.Always);



if (localSettings.Containers.ContainsKey("exampleContainer"))

{

   localSettings.Containers["exampleContainer"].Values["exampleSetting"] = "Hello Windows";

}



从设置中读取数据

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

C#
// Simple setting



Object value = localSettings.Values["exampleSetting"];



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

C#
// Composite setting



Windows.Storage.ApplicationDataCompositeValue composite = 

   (Windows.Storage.ApplicationDataCompositeValue)localSettings.Values["exampleCompositeSetting"];



if (composite == null)

{

   // No data

}

else

{

   // Access data in composite["intVal"] and composite["strVal"]

}



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

C#
// Setting in a container



bool hasContainer = localSettings.Containers.ContainsKey("exampleContainer");

bool hasSetting = false;



if (hasContainer)

{

   hasSetting = localSettings.Containers["exampleContainer"].Values.ContainsKey("exampleSetting");

}



将数据写入文件

使用文件 API(如 Windows.Storage.StorageFolder.CreateFileAsync 和Windows.Storage.FileIO.WriteTextAsync)在本地应用数据存储中创建和更新文件。此示例会在 localFolder容器中创建一个名为 dataFile.txt 的文件并将当前日期和时间写入该文件中。CreationCollisionOption 枚举中的ReplaceExisting 值指示替换该文件(如果存在的话)。

  • Applies to Windows Phone

在 Windows Phone 设备上,默认情况下会备份应用数据。如果你不想要备份某个文件,请将其保存在应用的本地存储的 LocalCache 子文件夹中。

C#
 
async void WriteTimestamp()

{

   Windows.Globalization.DateTimeFormatting.DateTimeFormatter formatter = 

       new Windows.Globalization.DatetimeFormatting.DateTimeFormatter("longtime");



   StorageFile sampleFile = await localFolder.CreateFileAsync("dataFile.txt", 

       CreateCollisionOption.ReplaceExisting);

   await FileIO.WriteTextAsync(sampleFile, formatter.Format(DateTime.Now));

}



从文件中读取数据

使用文件 API(如Windows.Storage.StorageFolder.GetFileAsyncWindows.Storage.StorageFile.GetFileFromApplicationUriAsync 和 Windows.Storage.FileIO.ReadTextAsync)在本地应用数据存储中打开和读取文件。此示例打开在上一步中创建的 dataFile.txt 文件并从该文件中读取日期。有关从多个位置加载文件资源的详细信息,请参阅如何加载文件资源

C#
async void ReadTimestamp()

{

   try

   {

      StorageFile sampleFile = await localFolder.GetFileAsync("dataFile.txt");

      String timestamp = await FileIO.ReadTextAsync(sampleFile);

      // Data is contained in timestamp

   }

   catch (Exception)

   {

      // Timestamp not found

   }

}



删除已完成使用的设置

调用 ApplicationDataContainerSettings.Remove 方法可在完成对 exampleSetting 设置的使用之后将其删除。

C#
// Delete simple setting



localSettings.Values.Remove("exampleSetting");



调用 ApplicationDataCompositeValue.Remove 方法可在完成对 exampleCompositeSetting 复合设置的使用之后将其删除。

C#
// Delete composite setting



localSettings.Values.Remove("exampleCompositeSetting");



调用 ApplicationDataContainer.DeleteContainer 方法可在完成对 exampleContainer 设置容器的使用之后将其删除。

C#
 
// Delete container



localSettings.DeleteContainer("exampleContainer");

你可能感兴趣的:(学习)