Unity本地文件IO

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#的应该也是差不多的。查了一下文档果然是这样。基础还是很重要的呀!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • Babybus-u3d技术交流-移动平台动态读取外部文件全解析 [ 移动平台动态读取外部文件全解析 前言: 一直有...
    Babybus_Unity阅读 978评论 0 1
  • 如何才能说服一名妈妈画画呢? 我想最诱惑的理由莫过于,你至少可以给孩子少报一个班。 一定有人会说,那我是不是要弹弹...
    豆迪阅读 889评论 2 5
  • 破冰之旅 音乐起,永锡舞。参加过不少沙龙,以舞蹈开场的还是第一次,永锡老师跳的卖力,现场听众拍(手)的拍的响亮。赞...
    北鲲老师阅读 665评论 0 1