关闭

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

标签: unity3d经验UWP
1958人阅读 评论(1) 收藏 举报
分类:

Universal Windows PlatformUWP)是微软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中的具体方法





   
1
0
查看评论

【UWP开发】如何通过unity发布win10 uwp应用

●准备工作 ◇安装了windows10专业版系统的电脑 ◇安装visual studio2015专业版,注意安装的时候需要选择windows10 sdk,下载地址 ◇unity安装windowsstore的plugin ●开始发布 ◇在buildsettings切换到windows ...
  • egostudio
  • egostudio
  • 2017-08-19 11:19
  • 801

Unity 游戏移植到 Windows10 之路 -- 环境搭建

孙广东   2015.8.31  是微软公司最新一代的跨平台及设备应用的操作系统。它统一了包括个人电脑、平板电脑、智慧型手机、嵌入式系统、Xbox One以及新产品Surface Hub
  • u010019717
  • u010019717
  • 2015-09-01 08:50
  • 2423

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

Universal Windows Platform(UWP)是微软Windows10专用的通用应用平台,其目的在于在统一操作系统下控制所有智能电子设备。 自从Unity 5.2之后,配合VS 2015和Windows 10 SDK就能够将Unity工程发布为UWP APP。可是这当中仍有数不清的...
  • xxxhhhyxy
  • xxxhhhyxy
  • 2017-06-05 21:18
  • 1958

Unity4.x UWP版本打包流程

结合具体的项目使用Desktop App Converter 把 Unity4.x 的应用 打包成UWP应用的流程整理
  • wuge026
  • wuge026
  • 2017-10-10 12:15
  • 334

[Unity3D]在UWP工程中使用的序列化方法

Unity3D开发中经常需要保存固化数据到本地,常用的数据序列化格式有XML、Json等,有时也会用到Protobuf。下面会依次讲解如何在UWP工程中使用Json及XML的序列化和反序列化。
  • u012741077
  • u012741077
  • 2016-08-08 22:26
  • 1352

Unity导出Window Store App的各种坑(1)

Unity导出UWP(C++/cx)项目
  • lile1234_show
  • lile1234_show
  • 2017-06-09 19:30
  • 1293

[Unity3D]适用于UWP的XmlDocument使用方法

本篇演示XmlDocument既可在UWP中使用又可在Unity3D编辑器中使用的方法。
  • u012741077
  • u012741077
  • 2016-08-10 01:39
  • 1477

win10 UWP读写文件

C# uwp应用的文件读写最常见错误就是没有权限。 而最简单的方法是对已知的文件路径进行访问 已知的文件路径常见的是自身的路径 权限这个和之前不同,UWP读写文件多用StorageFile来读写文件 [TOC] StorageFile没有直接的打开一个文件的做法,而是通过StorageFo...
  • lindexi_gd
  • lindexi_gd
  • 2015-10-09 21:58
  • 12587

unity打包windows10uwp的一些坑

虽然uwp现在不见起色,但是还是有一部分人会下载uwp的,第一次打包uwp遇到了些坑,把这些总结一下,后人也不用多踩了,第一个,编译选项,这个scripting要改成.NET。 第二个如果使用了dll的litjson请换成源码版的,并且源码版的也会报错,但是只需找到出错这几行,删掉其中的一些就可以...
  • xzfh_xwyz
  • xzfh_xwyz
  • 2018-01-27 14:24
  • 68

(一)Unity3D 2017 下载安装(配合VS 2017)

Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。目前,Unity正在迅速发展,前景可期,因此值得我们学习。下面先来学习一下Unity5.3.4的安装和破解...
  • qq331059279
  • qq331059279
  • 2017-09-12 20:47
  • 6291
    个人资料
    • 访问:14167次
    • 积分:275
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:0篇
    • 译文:0篇
    • 评论:9条
    文章分类
    最新评论