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