前一篇涨姿势UWP源码分析从数据源着手,解释了RSS feed的获取和解析,本篇则会就数据源的保存和读取进行举例。

  和之前的Windows Runtime一样,UWP采用IsolatedStorage的方式来存储APP的私有数据,这样做到APP之间互不干扰,减少了错误及安全隐患。现在的Application的设计似乎都流行这个做法。

  UWP中对应用程序数据存储区的访问,通常使用ApplicationData这个类来操作,我们把最常用的一些属性列出:

属性和方法

用途

public StorageFolder LocalFolder { get; }

获取本地应用程序数据存储区中的根文件夹。

public ApplicationDataContainer LocalSettings { get; }

获取本地应用程序数据存储区中的应用程序设置容器。

public StorageFolder RoamingFolder { get; }

获取漫游应用程序数据存储区中的根文件夹。

public ApplicationDataContainer RoamingSettings { get; }

获取漫游应用程序数据存储区中的应用程序设置容器。

public IAsyncAction ClearAsync();

删除本地、漫游以及临时应用程序数据存储区中的所有应用程序数据。

  具体在涨姿势UWP中,首先通过ApplicationData.Current.LocalFolder拿到当前APP对应存储空间的根文件夹,然后通过StorageFolder对象进行CreateFile操作,注意这里选择了CreationCollisionOption.ReplaceExisting这个枚举,期望每次都能够用新的RSS feed文件覆盖已有的文件。

  接下来需要先将需要保存的字符串内容转换成已编码的buffer对象,再通过FileIO.WriteBufferAsync方法写入之前创建好的文件中。当然你直接FileIO.WriteTextAsync也不是不可以,CryptographicBuffer主要包含Encode,Decode等编码相关的方法,可用于加密操作。

        public async Task<bool> SaveRssFileAsync(string content)
{
bool isWriteSuccess = true;
try
{
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile rssFile = await storageFolder.CreateFileAsync(RssFileName, CreationCollisionOption.ReplaceExisting); var buffer = CryptographicBuffer.ConvertStringToBinary(content, BinaryStringEncoding.Utf8);
await FileIO.WriteBufferAsync(rssFile, buffer);
}
catch (Exception)
{
isWriteSuccess = false;
} return isWriteSuccess;
}

  UWP文件存储相关的类,除了上述提到的Windows.Storage命名空间下最常用的StorageFolder、StorageFile和FileIO,还有Windows.Storage.Pickers命名空间下的各类Picker,Windows.Storage.Streams命名空间下的各种buffer,steam,熟悉之后用起来还是很方便的。

  接着我们看看读取文件内容的操作,同样是找到LocalFolder,然后根据文件名去读取StorageFile,如果StorageFile不为空,就通过ReadTextAsync方法来获取存储的文本内容。

        public async Task<string> ReadRssFileAsync()
{
string content = string.Empty; StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile rssFile = await storageFolder.TryGetItemAsync(RssFileName) as StorageFile;
if (rssFile != null)
{
content = await FileIO.ReadTextAsync(rssFile);
} return content;
}

  文件的保存和读取大致就是以上这些,是不是比想象的简单多了。上周涨姿势UWP更新了一版,修复了一些不可告人的小bug,优化(或丑化)了部分界面,欢迎来涨姿势。

涨姿势UWP源码——IsolatedStorage的更多相关文章

  1. [UWP]涨姿势UWP源码——IsolatedStorage

    前一篇涨姿势UWP源码分析从数据源着手,解释了RSS feed的获取和解析,本篇则会就数据源的保存和读取进行举例. 和之前的Windows Runtime一样,UWP采用IsolatedStorage ...

  2. [UWP]涨姿势UWP源码——Unit Test

    之前我们讨论了涨姿势UWP的RSS数据源获取,以及作为文件存储到本地,再将数据转化成Model对象.这部分非UI的内容非常适合添加Unit Test.不涉及UI的话,UT写起来简单高效,很是值得投入一 ...

  3. [UWP]涨姿势UWP源码——RSS feed的获取和解析

    本篇开始具体分析涨姿势UWP这个APP的代码,首先从数据的源头着手,即RSS feed的获取和解析,相关的类为RssReader,所有和数据相关的操作均放在里面. 涨姿势网站提供的RSS feed地址 ...

  4. [UWP]涨姿势UWP源码——极简的RSS阅读器

    涨姿势UWP,一个开源的RSS阅读器,一个纯粹的项目,一个有道德的APP,一个脱离了低级趣味的作者,一些有益于人民的代码.骚年,还等什么,来涨点姿势吧! 该项目代码可能会引起部分人群的不适,敏感人群请 ...

  5. [UWP]涨姿势UWP源码——UI布局

    懒癌晚期兼正月里都是过年,一直拖到今天才继续更新.之前的几篇介绍了数据的来源,属于准备工作.本篇我们正式开始构建涨姿势UWP程序的UI界面. 我们这个Hello World程序比较简单,总共只有一个页 ...

  6. [UWP]涨姿势UWP源码——适配电脑和手机

    上一篇我们介绍了绘制主界面的MainPage.xaml,本篇则会结合MainPage.xaml.cs来讲一讲如何适配电脑和手机这些不同尺寸的设备. 同时适配电脑和手机存在几个麻烦的地方: 屏幕尺寸差距 ...

  7. UWP源码——Unit Test

    之前我们讨论了涨姿势UWP的RSS数据源获取,以及作为文件存储到本地,再将数据转化成Model对象.这部分非UI的内容非常适合添加Unit Test.不涉及UI的话,UT写起来简单高效,很是值得投入一 ...

  8. 最美时光第三方UWP源码公开

    自己大概写了一个星期的成果.. 使用了官方最美时光app的UI和图片资源,并没有调用官方接口 https://files.cnblogs.com/files/loyieking/NiceCountDo ...

  9. 【完全开源】知乎日报UWP版(下篇):商店APP、github源码、功能说明。Windows APP 良心出品。

    目录 说明 功能 截图+视频 关于源码和声明 说明 陆陆续续大概花了一个月的时间,APP算是基本完成了.12月份一直在外出差,在出差期间进行了两次功能完善,然后断断续续修补了一些bug,到目前为止,我 ...

随机推荐

  1. 【原创】说说JSON和JSONP,也许你会豁然开朗,含jQuery用例

    说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服 ...

  2. LinkedList的一种错误使用方法

    近期在做图像处理的时候.发现某一段代码很的慢.慢得让人无法接受.基本的代码是顺序訪问一个LinkedList的元素,效果是随着index的变大,速度越来越慢,list的元素个数在百万以上.找到原因,分 ...

  3. layer弹窗的操作方法

    1.首先去http://layer.layui.com/下载插件 2.在网站上有演示说明 3.操作方法如何 <script src="../js/layer/layer.js" ...

  4. php 删除文件夹下的所有文件

    $patch = dirname(__FILE__).'/Cookie/';//获取文件目录 $files = scandir($patch); foreach ($files as $filenam ...

  5. 全栈工程师的武器——MEAN(转)

    MongoDB MongoDB也就是常说的NoSQL数据库.可以认为它是文档结构的数据库,而不是由行.列.表组成的数据库.基本的用法是存储JSON数据,这很适合JavaScript程序.它是非关系型. ...

  6. MySQL怎样存储IP地址

    为什么要问如何存储IP 首先就来阐明一下部分人得反问:为什么要问IP得怎样存,直接varchar类型不就得了吗? 其实做任何程序设计都要在功能实现的基础上最大限度的优化性能.而数据库设计是程序设计中不 ...

  7. unity, access scene ambient

    lighting面板里设置的ambient color,在shader里访问是通过UNITY_LIGHTMODEL_AMBIENT这个变量. 它定义在UnityShaderVariables.cgin ...

  8. Application Architecture Determines Application Performance

     Application Architecture Determines Application Performance Randy Stafford AppliCATion ARCHiTECTuR ...

  9. Atitit..css的体系结构

    Atitit..css的体系结构 1. Oocss 与 bem标准化1 1.1. 四种样式表及六种选择器1 1.2. 常用的css框架  amazeui   bootstrap1 1.3. Css图标 ...

  10. 关于http ,那些你必须知道的事

    一,HTTP简介 1,HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览 ...