Unity技术分享

Unity本地文件IO

2017-12-21  本文已影响36人  Michaelbest1
PC/iOS文件目录兼容

做Unity开发的时候,很多时候都需要写本地文件。文件IO本来是个简单的东西,C#库已经封装得很好了。但是如果要牵扯到跨平台,就会有点麻烦。
比如iOS上,每一个app只能读写自己沙盒里的文件。甚至有的目录是只读的。前两天就遇到了这个坑。
一开始我没有做跨平台处理,文件目录直接用Application.DataPath。结果在模拟器里调试的时候会有错误日志,显示不能写某文件。
仔细查阅了一下Unity官方文档,才发现原来要用Application.persistentDataPath才可以。

    private static string getPlatformPath(string filename)
    {
        if (Application.platform == RuntimePlatform.IPhonePlayer) {
            return Path.Combine(Application.persistentDataPath, filename);
        }
        return Application.dataPath + "/Resources/Data/" + filename;
    }

这边我只处理了iOS的。其它平台因为暂时不需要处理所以就不管了。
还要注意最好用Path.Combine,因为不同平台的目录分隔符有所不同。

文件打开

打开文件的时候,如果需要在文件不存在的时候创建文件,需要这样:

FileStream fs = new FileStream(fullpath, FileMode.OpenOrCreate, FileAccess.Read);
StreamReader reader = new StreamReader(fs);

我一开始的时候没有用FileStream,直接用的StreamReader。但直接用StreamReader是不能实现这个功能的,于是想起来Java里IO流decorator式的设计,C#的应该也是差不多的。查了一下文档果然是这样。基础还是很重要的呀!

上一篇下一篇

猜你喜欢

热点阅读