zoukankan      html  css  js  c++  java
  • 涨姿势UWP源码——IsolatedStorage

     前一篇涨姿势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主要包含EncodeDecode等编码相关的方法,可用于加密操作。

    复制代码
            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命名空间下最常用的StorageFolderStorageFileFileIO,还有Windows.Storage.Pickers命名空间下的各类PickerWindows.Storage.Streams命名空间下的各种buffersteam,熟悉之后用起来还是很方便的。

      接着我们看看读取文件内容的操作,同样是找到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,优化(或丑化)了部分界面,欢迎来涨姿势。

  • 相关阅读:
    Scrapy 概览笔记
    Python 依赖版本控制 (requirements.txt 文件生成和使用)
    Python 虚拟空间的使用
    macOS 所有版本 JDK 安装指南 (with Homebrew)
    鉴权那些事
    Java 位运算符和 int 类型的实现
    ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
    如何做好一次知识或技术分享
    ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
    ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
  • 原文地址:https://www.cnblogs.com/xieqing/p/6519793.html
Copyright © 2011-2022 走看看