各平台本地路径问题, 此路径不是 Unity工程中 Assets 文件加下的路径, 在PC端为本地路径,在移动端为沙盒路径,所以文件存储在 Unity工程Assets下,在移动端是不能用如下方法读取的
将代码挂在摄像机上运行即可
using UnityEngine;
using System.Collections;
using System.IO;
public class Read : MonoBehaviour {
private string path = "";
string content = "";
// Use this for initialization
void Start () {
path = Application.persistentDataPath;
//获取本地路径
//在iphone,Android平台上为沙盒路径, 在PC端为 本地 路径, 切记不是在Unity工程中“Assets”下的路径
#if ((UNITY_IPHONE || UNITY_ANDROID) && (!UNITY_EDITOR))
path += "/Documents";
#else
path = Application.dataPath; // PC端,本地路径
#endif
//如果平台上该路径不存在,即没有相应的文件夹,按照该路径创建一个
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
}
void OnGUI()
{
if (GUI.Button(new Rect(50, 50, 200, 50), "Read"))
{
//读取文件
ReadMyTxt(path, "AAA.txt");
}
if (GUI.Button(new Rect(50, 150, 200, 50), "Create"))
{
CreateTxt(path, "AAA.txt", "aaaaaaaaaabbbbbbbbbbcccccccccdddddddddd");
}
if (GUI.Button(new Rect(50, 300, 200, 50), "Clear"))
{//清空数据
content = "";
}
GUI.Label(new Rect( 50, 500, 300, 80), "path : " + path);
GUI.Label(new Rect(50, 600, 300, 80), "content : " + content);
}
//读取txt文件,参数1为路径,参数2为文件名(要带后缀)
private void ReadMyTxt(string path, string txtName)
{
string sss = path + "/" + txtName;
if (!File.Exists(sss)) //如果文件不存在退出
{
content = "!Exists " + sss;
return;
}
try
{
//实例化文件流,参数1 路径,参数2文件操作方式
FileStream file = new FileStream(sss, FileMode.Open);
StreamReader sr = new StreamReader(file);
content = sr.ReadToEnd(); //从文件头读取到文件尾
sr.Close(); //关闭流释放空间
file.Close();
}
catch{}
}
//创建文件,参数1 路径,参数2 文件名,参数3 写入信息
private void CreateTxt(string path, string txtName, string info)
{
string sss = path + "/" + txtName;
try
{
StreamWriter sw;
FileInfo t = new FileInfo(sss);
//如果文件不存在则创建一个
if (!t.Exists)
{
sw = t.CreateText();
}
else
{
sw = t.AppendText();
}
//写入信息
sw.WriteLine(info);
sw.Close();
sw.Dispose();
}
catch {}
}
}
本脚本适合在有服务器的情况下,项目更新时从服务器加载一些文件,然后将文件写入到本地(在移动平台为写入沙盒)
注意:在Unity项目中Assets下创建的文件夹,里边存放的一些文件,在安装时,是不会写入到移动端的沙盒路径内的,所以如果在开发中本来已经放入工程中的文件信息,用该方法是读取不到文件的。
(至于在项目中存放的文件信息如何读取,请在后续本人后续的博客中寻找)