代码改变世界

快速构建Windows 8风格应用26-本地应用数据

2012-11-16 20:49  王祖康  阅读(1611)  评论(0编辑  收藏  举报

本篇博文主要介绍如何获取应用的设置和文件容器、如何将数据写入设置、如何从设置中获取数据、如何删除设置中数据、如何将数据写入文件、如何从文件中获取数据。

 

当应用安装时,系统会为设置和文件等应用数据提供它自己的每用户数据存储。我们不需要知道这些数据存在哪里或如何存储,因为系统会负责管理物理存储工作。我们只需使用应用数据API就可以了。

本地应用数据一般用于当前设备数据的持久化,并且本地数据没有限制大小,通常情况使用本地数据存储大型数据集。

 

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

1.使用ApplicationData.LocalSettings属性可以获取ApplicationDataContainer 对象中的设置。

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

2.使用 ApplicationData.LocalFolder 属性可以获取StorageFolder 对象中的文件。

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

如何将数据写入设置

我们可以通过三种方式将数据写入设置。

1.使用ApplicationDataContainer.Values属性。

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

使用键-值对的方式。

2.使用ApplicationDataCompositeValue对象,进行一个复合的设置。

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

3.使用ApplicationDataContainer.CreateContainer方法创建设置容器,将数据添加到容器中。

Windows.Storage.ApplicationDataContainer container = 
   localSettings.CreateContainer("exampleContainer", Windows.Storage.ApplicationDataCreateDisposition.Always);
 
if (localSettings.Containers.ContainsKey("exampleContainer"))
{
   localSettings.Containers["exampleContainer"].Values["exampleSetting"] = "Hello Windows";
}

其中Windows.Storage.ApplicationDataCreateDisposition的枚举值Always表示该容器不存在的话进行创建。

如何从设置中获取数据

1.使用ApplicationDataContainer.Values属性获取数据。

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

 

2.使用ApplicationDataContainer.Values属性获取复合设置中数据。

Windows.Storage.ApplicationDataCompositeValue composite = 
   (Windows.Storage.ApplicationDataCompositeValue)localSettings.Values["exampleCompositeSetting"];
 
if (composite == null)
{   
}
else
{   
}

 

3.使用ApplicationDataContainer.Values属性获取容器中数据

bool hasContainer = localSettings.Containers.ContainsKey("exampleContainer");
bool hasSetting = false;
 
if (hasContainer)
{
   hasSetting = localSettings.Containers["exampleContainer"].Values.ContainsKey("exampleSetting");
}

如何删除设置中数据

1.使用ApplicationDataContainerSettings.Remove方法可以删除数据、复合数据设置以及容器设置。

localSettings.Values.Remove("exampleSetting");

如何将数据写入文件

通常我们会使用Windows.Storage.StorageFolder.CreateFileAsyncWindows.Storage.FileIO.WriteTextAsync在本地数据存储中创建或更新文件。

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));
}

其中CreationCollisionOption中的ReplaceExisting值表示若该文件不存在就创建,若存在就替换。

如何从文件中获取数据

通常我们会使用Windows.Storage.StorageFolder.GetFileAsyncWindows.Storage.StorageFile.GetFileFromApplicationUriAsyncWindows.Storage.FileIO.ReadTextAsync在本地数据存储中打开或读取文件。

async void ReadTimestamp()
{
   try
   {
      StorageFile sampleFile = await localFolder.GetFileAsync("dataFile.txt");
      String timestamp = await FileIO.ReadTextAsync(sampleFile);     
   }
   catch (Exception)
   {      
   }
}

 

MSDN中提供相关示例代码:Application data sample