如果我们每次把临时处理的文件保存,都要让用户选择一次,用户会不会觉得uwp垃圾?如果我们每次打开应用,都从某个文件读取,而这个文件不在应用目录和已知的目录,那么每次都需要用户选择,用户会不会觉得uwp垃圾?

其实垃圾wr给了一个类,我们可以用这个类获得用户选择过的文件、文件夹。我们可以保存用户选择过的文件和文件夹。

这个类在Windows.Storage.AccessCache,可以使用最近使用或一个比较大的存储,最近使用自有25个,我这里就不说。FutureAccessList可以存储1k个文件或文件夹,但垃圾wr给了我们这个东西,找不到他就给1k而不是无限。

要使用这个类,其实我们就只用三个函数,其中我们需要知道,使用FutureAccessList拿出一个我们保存的文件或文件夹需要一个token。

我们先从让用户选择选择文件夹,选择文件夹需要FolderPicker。

不知道FolderPicker需要FileTypeFilter,这个设计。我们需要给他一个值,开头是”.”


            FolderPicker pick=new FolderPicker();

            pick.FileTypeFilter.Add(".png");

然后让用户选择,这里是异步,我们可以让用户选择,然后我们做我们的。


            IAsyncOperation<StorageFolder> folderTask= pick.PickSingleFolderAsync();

            //做我们的

            StorageFolder folder = await folderTask;

我们可以省一点,让用户选择我们不做什么


            var folder =await pick.PickSingleFolderAsync();

判断用户选择,如果有选择folder !=null

判断选择我们需要把它放进FutureAccessList,放进去可以拿到token


            if (folder != null)

            {

                Folder = folder;

                Address = folder.Path;

                Token=StorageApplicationPermissions.FutureAccessList.Add(folder);

            }

然后我们需要把token放到我们本地文件的位置。

我放在account/account.json

先拿到本地文件夹


            string folderStr = "account";

            StorageFolder folder = ApplicationData.Current.LocalFolder;

创建一个文件夹account,因为如果是第一次我们就没有文件夹,如果不是我们就有


            try

            {

                folder = await folder.GetFolderAsync(folderStr);

            }

            catch (FileNotFoundException)

            {

                folder = await folder.CreateFolderAsync(folderStr);

            }

创建文件


            StorageFile file = await folder.CreateFileAsync(

                folderStr+".json", CreationCollisionOption.ReplaceExisting);

因为我们就保存一次,一个好的做法是创建temp,然后做完所有再把原来的改名字为以前做的,然后把temp改名字为account.json,注意保存原先改名字的文件,并把原先改名字的之前的文件删除。

如果我们在保存失败,那么我们的原先文件不会影响,如果我们保存文件在改名字出错了,可以通过原先恢复,这样才好。

我们使用json保存,使用我们第三方。


  var json = JsonSerializer.Create();

我们需要用StringBuilder来把json序列存放,如果直接用


            json.Serialize(new JsonTextWriter(

                new StreamWriter(await file.OpenStreamForWriteAsync())), Account);

就会出现下次使用UnauthorizedException,UWP UnauthorizedException 创建文件在LocalFolder一般就是我们使用json错误

Account就是我们的数据。

我写的方法应该可以是可以把token保存的


            StringBuilder str = new StringBuilder();

            StringWriter stream=new StringWriter(str);

            json.Serialize(new JsonTextWriter(

               stream ), Account);

            using (StorageStreamTransaction transaction = await file.OpenTransactedWriteAsync())

            {

                using (DataWriter dataWriter = new DataWriter(transaction.Stream))

                {

                    dataWriter.WriteString(str.ToString());

                    transaction.Stream.Size = await dataWriter.StoreAsync();

                    await transaction.CommitAsync();

                }

            }

我们应用开始我们就可以读取

读取就可以用json的


                    StorageFile file = await folder.GetFileAsync(folderStr + ".json");

                    var json = JsonSerializer.Create();

                    Account = json.Deserialize<Account>(new JsonTextReader(

                        new StreamReader(await file.OpenStreamForReadAsync())));

folder要进去account

我们从FutureAccessList拿文件


             file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(Account.Token);


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

win10 uwp 保存用户选择文件夹的更多相关文章

  1. 2019-9-2-win10-uwp-保存用户选择文件夹

    title author date CreateTime categories win10 uwp 保存用户选择文件夹 lindexi 2019-09-02 12:57:38 +0800 2018-2 ...

  2. C# WINFORM 编程中,选择**文件夹**而不是文件的方法(转)

    我们选择文件可以用 OpenFileDialog ,但是文件夹有两种方法. 法一: 用C#的FolderNameEditor类的子类FolderBrowser类来实现获取浏览文件夹对话框的功能.下面来 ...

  3. Winforms选择文件夹、文件

    更新记录: 2022年5月28日 初始记录 选择文件夹 if (this.folderBrowserDialog1.ShowDialog() == DialogResult.OK) { //获得用户选 ...

  4. python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件)

    # python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件) import tkinter as tk from tkinter import filedial ...

  5. C#选择文件、选择文件夹、打开文件

    1.选择文件用OpenDialog OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;//该值确定是否可以 ...

  6. C# 选择文件、选择文件夹、打开文件(或者文件夹) 路径中获取文件全路径、目录、扩展名、文件名称 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名!!

    https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1.选择文件用OpenDialog OpenFileDialog dialog = new Ope ...

  7. delphi 选择文件夹,路径选择,浏览文件夹

    选择文件夹,路径选择, 文件夹 资源管理器 推荐  SelectDirectory http://docwiki.embarcadero.com/Libraries/Seattle/en/Vcl.Fi ...

  8. c++选择文件夹对话框

    1,目的 提供一个对话框供用户选择一个文件夹路径. 2,原理&实现 先贴上这个工具类的源码: 在你的程序中使用静态方法 CSelectFolderDlg::Show() 就能显示一个选择文件夹 ...

  9. C# winform选择文件、选择文件夹、打开文件

    文章来自博客园友,这里只是做一下笔记. 来源:https://www.cnblogs.com/liuqifeng/p/9149125.html 一.选择文件用OpenDialog OpenFileDi ...

随机推荐

  1. 团队作业八——第二次团队冲刺(Beta版本)第5天

    团队作业八--第二次团队冲刺(Beta版本)第5天 一.每个人的工作 (1) 昨天已完成的工作 完成界面跳转界面. (2) 今天计划完成的工作 简单模式逻辑代码涉及与相关功能的具体实现 (3) 工作中 ...

  2. 团队作业4——第一次项目冲刺(Alpha版本) Day1

    1.开站立式会议: 2.Leangoo任务分解图: 3.开会讨论的结果,任务分派 队员 今日进展 明日安排 林燕 调查产品的市场需求,学习微信开发 完善逻辑架构框架 王李焕 结合实际分析系统设计思路, ...

  3. 201521123074 《Java程序设计》第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 用Arrar ...

  4. 201521123076《Java程序设计》第1周学习总结

    一. 本章学习总结 1.了解了JDK,JVM,JRE的相关内容 JVM(Java Virtual Machine): Java虚拟机,*.java原始码,经过编译程序翻译为.class位码.JVM正是 ...

  5. Python[小甲鱼007了不起的分支和循环]

    加载背景音乐播放背景音乐(设置单曲循环)我方飞机诞生interval = 0while True:if 用户是否点击关闭按钮退出程序breakinterval += 1if interval = 50 ...

  6. Log4J:Log4J三大组件:Logger+Appender+Layout 格式化编程详解

    快速了解Log4J Log4J的三个组件: Logger:日志记录器,负责收集处理日志记录     (如何处理日志) Appender:日志输出目的地,负责日志的输出  (输出到什么 地方) Layo ...

  7. Python学习笔记009_构造与析构

    >>> # 魔法方法>>> >>> # 魔法方法总是被双下划线包围,例如 __init__>>> # 魔法方法是面向对象的Pyt ...

  8. 传统编程和IoC的对比

    ref:http://www.importnew.com/13619.html 传统编程:决定使用哪个具体的实现类的控制权在调用类本身,在编译阶段就确定了. IoC模式:调用类只依赖接口,而不依赖具体 ...

  9. mongodb 面试题总结

    mongodb 面试题总结 1 nosql和关系型数据库的区别 2 nosql数据库有哪些 redis mongodb hbase 3 MySQL与mongodb本质之间最基本的差别是什么 差别在多方 ...

  10. 在 Ubuntu 上安装 MongoDB

    在 Ubuntu 上安装 MongoDB 运行下列命令,导入 MongoDB 公开 GPG 键: sudo apt-key adv --keyserver hkp://keyserver.ubuntu ...