04、应用程序数据操作(上)

 1、files:

    在应用程序中用户的数据可以存储在文件中。共有三个地方可以用来存放文件:

              Windows.Storage.ApplicationData.current.localFolder

           Windows.Storage.ApplicationData.current.roamingFolder

          Windows.Storage.ApplicationData.current.temporaryFolder

 

导读(Local、Roaming、Temporary files):

     文件适用于存储大的数据集,数据库,或者普通文件格式的数据. 并且文件可以放在本地,云端(漫游),或者临时文件夹中.

     文件可以通过用户登录的计算机被同步到与用户账户相关的云端。位于云端的文件并不是持久的:操作系统会权衡几个因素

从而决定什么时候发送这些数据。传送到云端的数据应在低于配额(具体取决于云端数据存储配额属性),否则会被暂停向云端传输

数据. 当应用程序在向文件中写数据时,该文件是不会被传送到云端的,所以当文件不需要再进行操作时尽可能把他们关闭.

       位于本地的文件是不会被同步到云端的,它们的读写方式和之前的类似.

        位于临时文件夹中的文件当不被使用时会被删除的. 操作系统会权衡比如这些文件的体积、在操作系统中保存的时间从而决定

  什么时候、是否删除这个临时文件。

          

下面的示例是对漫游文件夹进行 读/写 文件操作,对于本地的和临时文件的操作和这个类似:

StorageFolder roamingFolder = ApplicationData.Current.RoamingFolder;  //获取漫游(云)的文件夹

  const string filename = "sampleFile.txt";   //存储数据的文件

int counter = 99; //存储在文件夹中的数据

 

//把该数据存储到文件中
  StorageFile file = await roamingFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
   await FileIO.WriteTextAsync(file, counter.ToString());

 

           //从文件中把数据读取出来
             try
            {
                StorageFile file = await roamingFolder.GetFileAsync(filename);
                string text = await FileIO.ReadTextAsync(file);

                OutputTextBlock.Text = "Counter: " + text;

                counter = int.Parse(text);
            }
            catch (Exception)
            {
                
            }

 

2、settings:

        在应用中主要存储设置数据的方法是把他们放为 键值对(key-value)的形式,例如:

Windows.Storage.ApplicationData.current.localSettings

Windows.Storage.ApplicationData.current.roamingSettings

,同时可以把它们存储到当前设备的 localSettings 中,或者使用 roamingSettings ,从而设置可以再用户的其它设备(pc)之间进行交互。对于漫游(roaming)设置的方式而言,同时取决于 HighPriority 属性和 DataChanged 事件。

 

     导读(Settings): Settings 是一种适用于在应用程序中体积较小、零碎的配置方式。

       Settings  可以用于本地(local)或者 (云端)roaming。

       漫游的设置(Roaming settings)可以通过用户用 微软账号登录的计算机同步到云端。漫游的设置不是持久的。操作系统通过权衡一些因素来决定什么时候发送这些数据。并且云端的数据必须保持在配额范围内,否则数据传输会被暂停。

        用户首选项为你的应用程序是一个重要的因素,为漫游的设置。用户首选项通常是固定在数量和规模较小。用户将感谢你的应用程序是定制他们更喜欢在他们所有的机器。

        本地数据不会被同步到云端.

         应该小心防范过度卷的数据存储在设置中。设置并不旨在用作数据库。大型数据集将需要更长的时间来从磁盘加载在你的应用程序。

       

     在这个示例中,展示如何读、写、清除位于本地的(local settings)的设置,漫游的设置(roaming settings)和这个类似:

       ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings; //获取本地的设置对象
        const string SettingName = "exampleSetting";//存储在设置中的数据的键

 

  localSettings.Values[SettingName] = "Hello World"; // 保存数据

 

 Object value = localSettings.Values[SettingName];//读取数据

 OutputTextBlock.Text = String.Format("Setting: {0}", (value == null ? "<empty>" : ("\"" + value + "\"")));  
 localSettings.Values.Remove(SettingName);//删除数据

 

 3、Setting Container

      Setting Container 本质上是设置的一些分组。它们对于设置的组织非常有用。可以通过使用:

Windows.Storage.ApplicationData.current.localSettings.createContainer  和

Windows.Storage.ApplicationData.current.localSettings.deleteContainer 去读、写和删除设置一个 setting container。

 ApplicationDataContainer localSettings = = ApplicationData.Current.LocalSettings;  //获取本地的设置对象

  const string containerName = "exampleContainer";//容器的名称
        const string settingName = "exampleSetting";//键的名称
ApplicationDataContainer container = localSettings.CreateContainer(containerName, ApplicationDataCreateDisposition.Always);//在当前设置容器中创建或打开指定的设置容器。
 if (localSettings.Containers.ContainsKey(containerName))
            {
                localSettings.Containers[containerName].Values[settingName] = "Hello World"; // example value
            }  //判断设置中是否包含该容器名称,如果包含则读取相应的键的值
 bool hasContainer = localSettings.Containers.ContainsKey(containerName);//判断设置容器中是否包含容器的名称
            bool hasSetting = hasContainer ? localSettings.Containers[containerName].Values.ContainsKey(settingName) : false;//如果包含该容器,就判断该设置容器是否该键值对

            String output = String.Format("Container Exists: {0}\n" +
                                          "Setting Exists: {1}",
                                          hasContainer ? "true" : "false",
                                          hasSetting ? "true" : "false");

            OutputTextBlock.Text = output;
//如果设置容器组中包含该设置容器,则删除该容器中的相应键值对  
if (localSettings.Containers.ContainsKey(containerName))
            {
                localSettings.Containers[containerName].Values.Remove(settingName);
            }

 

 

 

 

 

 

posted @ 2012-09-14 17:50  博琼  阅读(575)  评论(0编辑  收藏  举报