【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (上篇)
Universal Windows Platform(UWP)是微软Windows10专用的通用应用平台,其目的在于在统一操作系统下控制所有智能电子设备。
自从Unity 5.2之后,配合VS 2015和Windows 10 SDK就能够将Unity工程发布为UWP APP。可是这当中仍有数不清的雷区,比如文件读取。
本篇是UWP文件读取的铺垫,下篇是Unity转UWP的文件读取
-----------------------------------
一、 文件权限
UWP对于文件的读写权限控制极其严格。一般来说,发布好的UWP应用只允许读取以下少数文件夹:
A) Win 10基础文件夹:视频、图片、音乐、文档
B) 应用文件夹:应用安装目录、应用漫游目录、应用缓存目录
二、 适用类
当我兴高采烈地将我的工程发布为UWP时,第一个坑出现在
FileStream fs=new FileStream(string,FileMode,FileAccess);
FileStream类在传统的C#或Unity工程中功能十分强大;但是在UWP中,该类下的方法少了一半不说,严格的读写权限让FileStream全无用武之地。即使在“FileMode.Open”和”FileAccess.Read”下,系统报错信息显示我的堆泄漏了,读取就是空谈。
所以,我也采用了Windows.Storage命名空间来进行读取(用StorageFolder和StorageFile)。
并且Windows.Storage.KnownFolders 中包含了Win 10系统下的多个已知目录文件夹:
① 视频库=Windows.Storage.KnownFolders.VideosLibrary
② 图片库= Windows.Storage.KnownFolders.PicturesLibrary
③ 音乐库= Windows.Storage.KnownFolders.MusicsLibrary
④ 文档= Windows.Storage.KnownFolders.DocumentsLibrary
⑤ 可移动设备= Windows.Storage.KnownFolders.RemovableDevices(据说是将所有接入该PC的移动设备都归纳到这个目录中,再进行索引,我并未尝试)
而常用的读取文本文件的方法如下(路径:“文档\Data\fff.txt”)(我制作出了一个Xaml按钮事件:将文本的文字赋给textBlock):
- private async void button_Click(object sender, RoutedEventArgs e)
- {
- StorageFolder docLib = await KnownFolders.DocumentsLibrary.GetFolderAsync("Data");
- StorageFile docFile = await docLib.GetFileAsync("fff.txt");
- string s;
- using (Stream fs = await docFile.OpenStreamForReadAsync())
- {
- using (StreamReader read = new StreamReader(fs))
- {
- s = read.ReadToEnd();
- }
- }
- textBlock.Text = s;
- }
然而考虑到读取字节并转变为别的变量,更通用的方法为:
- private async void button_Click(object sender, RoutedEventArgs e)
- {
- StorageFolder docLib = await KnownFolders.DocumentsLibrary.GetFolderAsync("Data");
- StorageFile docFile = await docLib.GetFileAsync("fff.txt");
- string s;
- using (Stream fs = await docFile.OpenStreamForReadAsync())
- {
- byte[] byData = new byte[fs.Length];
- fs.Read(byData, 0, (int)fs.Length);
- s = System.Text.Encoding.UTF8.GetString(byData);
- }
- textBlock.Text = s;
- }
其中,byData就是取出的字节,至于转换成什么大家自己玩。
上述代码需要 using Windows.Storage和 using System.IO
这种方法使用了异步机制,在纯Xaml写出的UWP应用中运行无碍。
之后,大家还需要在解决方案资源管理其中找到Package.appxmanifest:
①右键查看代码,并在<Capabilities>元素下添加:
- <Capabilities>
- <uap:Capability Name="documentLibrary">//如果是图片库和音乐库等,则可以直接双击点开,并在查看器中勾选。文档库没有这种便利。
- </Capabilities>
②双击点开Package.appxmanifest,在“声明”中添加“文件类型关联”,我用到了.txt
可是!
在Unity中:
①Unity没有Windows.Storage命名空间
②Unity的C#版本只有4.0,不支持诞生于4.5的async/await异步机制(StorageFile一定会用到)。所以——我会在下篇讲述在Unity中的具体方法
【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (上篇)的更多相关文章
- 【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (下篇)
Universal Windows Platform(UWP)是微软Windows10专用的通用应用平台,其目的在于在统一操作系统下控制所有智能电子设备. 自从Unity 5.2之后,配合VS 201 ...
- win10 uwp 保存用户选择文件夹
如果我们每次把临时处理的文件保存,都要让用户选择一次,用户会不会觉得uwp垃圾?如果我们每次打开应用,都从某个文件读取,而这个文件不在应用目录和已知的目录,那么每次都需要用户选择,用户会不会觉得uwp ...
- 本地文件读取(csv,txt)时字符编码问题解决
今天进行csv文件读取时,老是入库为空,因为其中有中文字符,我要通过中文字符映射成相应的编号(上升:1011,下降:1012),于是怎么也取不到编号.刚开始以为程序映射出了问题,最后日志打出来后,发现 ...
- win10 uwp 获取指定的文件 AQS
很多时候不需要获取整个文件夹的文件,是需要获取文件夹里指定的文件. 那么 UWP 如何对文件夹里的文件进行过滤,只拿出自己需要的文件? 本文:如何使用通配符或文件匹配方式在uwp获取文件夹中指定的文件 ...
- 使用git pull文件时和本地文件冲突怎么办?
同事在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息: error: Your local changes to 'c/environ.c' would be overwritten ...
- 使用git pull文件时和本地文件冲突怎么办
在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息:error: Your local changes to 'c/environ.c' would be overwritten by ...
- git pull文件时和本地文件冲突的问题
在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息: error: Your local changes to 'c/environ.c' would be overwritten b ...
- git pull文件时和本地文件冲突 方法之一
1.先将本地修改存储起来 2.pull内容 3.还原暂存的内容 4.解决文件中冲突的的部分 打开 dsa.txt 文件手动解决冲突. 其中Updated upstream 和=====之间的内容就是p ...
- Win10 UWP应用发布流程
简介 Win10 UWP应用作为和Win8.1 UAP应用不同的一种新应用形式,其上传至Windows应用商店的流程也有了一些改变. 这篇博文记录了我们发布一款Win10 UWP应用的基本流程,希望为 ...
随机推荐
- 在静态方法和非静态方法上加 Synchronized的区别
Synchronzied 修饰非静态方法==>对象锁 Synchronzied 修饰静态方法==>其实是类锁,因为是静态方法,它把整个类锁起来了: 1.Synchronized修饰非静态方 ...
- 洛谷P13445 [USACO5.4]奶牛的电信Telecowmunication(网络流)
题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...
- 洛谷P3348 [ZJOI2016]大森林(LCT,虚点,树上差分)
洛谷题目传送门 思路分析 最简单粗暴的想法,肯定是大力LCT,每个树都来一遍link之类的操作啦(T飞就不说了) 考虑如何优化算法.如果没有1操作,肯定每个树都长一样.有了1操作,就来仔细分析一下对不 ...
- 32个Python爬虫实战项目,满足你的项目慌
爬虫项目名称及简介 一些项目名称涉及企业名词,小编用拼写代替 1.[WechatSogou]- weixin公众号爬虫.基于weixin公众号爬虫接口,可以扩展成其他搜索引擎的爬虫,返回结果是列表,每 ...
- SpringBoot中使用SpringDataJPA
SpringDataJPA的使用 JPA是什么? JPA(Java Persistence API)是Sun官方提出的Java持久化规范. 为Java开发人员提供了一种对象/关联映射工具来管理Java ...
- AIO 开始不定时的抛异常: java.io.IOException: 指定的网络名不再可用
一天里会抛出几个这样的错误,但发现服务还在正常的运行. java.io.IOException: 指定的网络名不再可用. at sun.nio.ch.Iocp.translateErrorToIOEx ...
- Python之旅:MySQL系列
第一篇:初识数据库 第二篇:库操作 第三篇:表操作 第四篇:数据操作 第五篇:索引原理与慢查询优化 第六篇:数据备份.pymysql模块 第七篇:视图.触发器.事务.存储过程.函数 第八篇:ORM框架 ...
- Mac 删除应用卸载后无法正常移除的图标
经常会不通过appstore下载软件,也就是从网页中下载dmg,自己安装,但是当我不再想要这个软件,然后把它卸载掉之后就会发现,launchpad里还是遗留了这个软件的图标,而且删不掉.这个时候,就可 ...
- c++并发编程之互斥锁(mutex)的使用方法
1. 多个线程访问同一资源时,为了保证数据的一致性,最简单的方式就是使用 mutex(互斥锁). 引用 cppreference 的介绍: The mutex class is a synchroni ...
- win32 ini
原文:https://www.cnblogs.com/qq78292959/archive/2012/06/10/2544389.html Windows操作系统专门为此提供了6个API函数来对配置设 ...