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):

  1.  
    private async void button_Click(object sender, RoutedEventArgs e)
  2.  
    {
  3.  
    StorageFolder docLib = await KnownFolders.DocumentsLibrary.GetFolderAsync("Data");
  4.  
    StorageFile docFile = await docLib.GetFileAsync("fff.txt");
  5.  
    string s;
  6.  
    using (Stream fs = await docFile.OpenStreamForReadAsync())
  7.  
    {
  8.  
    using (StreamReader read = new StreamReader(fs))
  9.  
    {
  10.  
    s = read.ReadToEnd();
  11.  
    }
  12.  
    }
  13.  
    textBlock.Text = s;
  14.  
    }

然而考虑到读取字节并转变为别的变量,更通用的方法为:

  1.  
    private async void button_Click(object sender, RoutedEventArgs e)
  2.  
    {
  3.  
    StorageFolder docLib = await KnownFolders.DocumentsLibrary.GetFolderAsync("Data");
  4.  
    StorageFile docFile = await docLib.GetFileAsync("fff.txt");
  5.  
    string s;
  6.  
    using (Stream fs = await docFile.OpenStreamForReadAsync())
  7.  
    {
  8.  
    byte[] byData = new byte[fs.Length];
  9.  
    fs.Read(byData, 0, (int)fs.Length);
  10.  
    s = System.Text.Encoding.UTF8.GetString(byData);
  11.  
    }
  12.  
    textBlock.Text = s;
  13.  
    }

其中,byData就是取出的字节,至于转换成什么大家自己玩。

上述代码需要 using Windows.Storage和 using System.IO

这种方法使用了异步机制,在纯Xaml写出的UWP应用中运行无碍。

之后,大家还需要在解决方案资源管理其中找到Package.appxmanifest:

①右键查看代码,并在<Capabilities>元素下添加:

  1.  
    <Capabilities>
  2.  
    <uap:Capability Name="documentLibrary">//如果是图片库和音乐库等,则可以直接双击点开,并在查看器中勾选。文档库没有这种便利。
  3.  
    </Capabilities>

②双击点开Package.appxmanifest,在“声明”中添加“文件类型关联”,我用到了.txt

可是!

在Unity中:

①Unity没有Windows.Storage命名空间

②Unity的C#版本只有4.0,不支持诞生于4.5的async/await异步机制(StorageFile一定会用到)。所以——我会在下篇讲述在Unity中的具体方法

【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (上篇)的更多相关文章

  1. 【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (下篇)

    Universal Windows Platform(UWP)是微软Windows10专用的通用应用平台,其目的在于在统一操作系统下控制所有智能电子设备. 自从Unity 5.2之后,配合VS 201 ...

  2. win10 uwp 保存用户选择文件夹

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

  3. 本地文件读取(csv,txt)时字符编码问题解决

    今天进行csv文件读取时,老是入库为空,因为其中有中文字符,我要通过中文字符映射成相应的编号(上升:1011,下降:1012),于是怎么也取不到编号.刚开始以为程序映射出了问题,最后日志打出来后,发现 ...

  4. win10 uwp 获取指定的文件 AQS

    很多时候不需要获取整个文件夹的文件,是需要获取文件夹里指定的文件. 那么 UWP 如何对文件夹里的文件进行过滤,只拿出自己需要的文件? 本文:如何使用通配符或文件匹配方式在uwp获取文件夹中指定的文件 ...

  5. 使用git pull文件时和本地文件冲突怎么办?

    同事在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息: error: Your local changes to 'c/environ.c' would be overwritten ...

  6. 使用git pull文件时和本地文件冲突怎么办

    在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息:error: Your local changes to 'c/environ.c' would be overwritten by ...

  7. git pull文件时和本地文件冲突的问题

    在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息: error: Your local changes to 'c/environ.c' would be overwritten b ...

  8. git pull文件时和本地文件冲突 方法之一

    1.先将本地修改存储起来 2.pull内容 3.还原暂存的内容 4.解决文件中冲突的的部分 打开 dsa.txt 文件手动解决冲突. 其中Updated upstream 和=====之间的内容就是p ...

  9. Win10 UWP应用发布流程

    简介 Win10 UWP应用作为和Win8.1 UAP应用不同的一种新应用形式,其上传至Windows应用商店的流程也有了一些改变. 这篇博文记录了我们发布一款Win10 UWP应用的基本流程,希望为 ...

随机推荐

  1. [转帖] Linux 下面 Find的使用...--- 自己不会用 find

    13个实用的Linux find命令示例  原始博客地址:  https://www.cnblogs.com/chenshoubiao/p/4838089.html   之前只会用locate  基础 ...

  2. 浅谈final修饰的变量

    一直大概的知道final关键字的作用,但是自己实际工作中却很少用,除非在声明一些常量值的时候,今天忽然自己在项目中用一个map进行存储一些值.一开始我只是用private修饰的,心里想的是如果fina ...

  3. EntityFramework中Json序列化的循环引用问题解决--Newtonsoft.Json

    1.在使用EF时,由于数据库主外键关联,将对象进行Json序列化时会遇到循环引用的问题 //EF 中由于数据库主外键关联,对象的序列化经常出现循环引用问题 //使用.Net 自带的序列化工具,序列化出 ...

  4. 【luogu3768】简单的数学题 欧拉函数(欧拉反演)+杜教筛

    题目描述 给出 $n$ 和 $p$ ,求 $(\sum\limits_{i=1}^n\sum\limits_{j=1}^nij\gcd(i,j))\mod p$ . $n\le 10^{10}$ . ...

  5. java虚拟机的内存划分

    为了提高运算效率,就对空间进行不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式. 一. 1.jvm的内存划分: 区域名称 作用 寄存器 给cpu使用,和我们开发无关 本地方法栈 jv ...

  6. pgm9

    这部分介绍 sampling 方法,书上也称为 particle-based method,这是因为每一个从分布中采集到的样本可以看成是一个 particle(instantiation of r.v ...

  7. 平面最近点对(分治nlogn)

    平面最近点对,是指给出平面上的n个点,寻找点对间的最小距离 首先可以对按照x为第一关键字排序,然后每次按照x进行分治,左边求出一个最短距离d1,右边也求出一个最短距离d2,那么取d=min(d1, d ...

  8. MT【86】两个绝对值之和最大

    分析:这里只需要注意到$(|x|+|y|)_{max}=max\{|x+y|,|x-y|\}$,所以只需求$max\{|20a|,|14b|\}$ 进而变成熟悉的反解系数问题.容易知道最大值为$a=2 ...

  9. Python Django性能测试与优化指南

    摘要:本文通过一个简单的实例一步一步引导读者对其进行全方位的性能优化.以下是译文. 唐纳德·克努特(Donald Knuth)曾经说过:“不成熟的优化方案是万恶之源.”然而,任何一个承受高负载的成熟项 ...

  10. 如何整合Office Web Apps至自己开发的系统(一)

    在前面我的一篇博客中 Office Web Apps安装部署(一),有一张介绍Office Web Apps与其他系统的关系图,   从上述图中,可知实际上Office Web Apps也是可以接入自 ...