
自从Unity 5.2之后,配合VS 2015和Windows 10 SDK就能够将Unity工程发布为UWP APP。可是这当中仍有数不清的雷区,比如文件读取。
上篇是UWP文件读取的铺垫,本篇是具体的Unity转UWP的文件读取
在Unity中:
①Unity没有Windows.Storage命名空间,所以这绝对是个坑。
②Unity的C#版本只有4.0,不支持诞生于4.5的async/await异步机制,所以StorageFile 中的各种异步方法全部不能用。
虽说发布成UWP,但是在UWP下运行时,依然会受到Unity的诸多限制。
当然网上有方法在Unity中使用异步机制:http://blog.csdn.net/u013628121/article/details/52964063
但是我并没有成功,最终在这篇文章中得到了灵感,即采用非异步的方式:http://blog.csdn.net/u012741077/article/details/52167614
下面奉上我的最终代码:
-
using System.Collections;
-
using System.Collections.Generic;
-
using UnityEngine;
-
using System.IO;
-
using System.Text;
-
using System;
-
#if NETFX_CORE //UWP下编译
-
using Windows.Storage;
-
#endif
-
/// <summary>
-
/// 数据控制类
-
/// </summary>
-
public class DataBase : MonoBehaviour
-
{
-
// Use this for initialization
-
void Start()
-
{
-
ReadData();
-
}
-
// Update is called once per frame
-
#if NETFX_CORE //UWP下
-
private void ReadData()
-
{
-
StorageFolder docLib = KnownFolders.DocumentsLibrary;
-
var docFile = docLib.OpenStreamForReadAsync("Data\\data.bin");
-
docFile.Wait();
-
var fs = docFile.Result;
-
//成功取出fs,后续操作自己玩
-
fs.Dispose();
-
}
-
#else //Unity下
-
private void ReadData()
-
{
-
string strDataPath = "C:\\Users\\YXY\\Documents\\Data\\data.bin";
-
Stream fs = new FileStream(strDataPath, FileMode.Open, FileAccess.Read);
-
//成功取出fs,后续操作自己玩
-
fs.Dispose();
-
}
-
#endif
-
}
这次的路径是:文档\Data\data.bin。对应传统路径:C:\Users\YXY\Documents\Data\data.bin。
上篇已经教过大家读取byte数据了,所以这里不再赘述,大家可以把byte转换成各种继续使用。
总而言之,只要不用异步方法取出流 fs,剩下的都好办了。
要点:
①FileStream的初始化在UWP中因为读写权限问题无法实现,但是可以用其父类Stream进行曲线救国。
②Stream在UWP中没有close方法,只有Dispose方法,据说没有办法保存文件,所以本篇只读不写。
原文链接:https://blog.csdn.net/xxxhhhyxy/article/details/72871607