首页 > 解决方案 > iPad 无法读取文本文件

问题描述

在我的 Unity3D 项目中,我有几个文本字段。我将我的文本保存在一些文本文件中。

当我在计算机上测试我的项目时,一切正常,我的代码读取文本文件。但如果我上传到我的 iPad,它将无法正常工作,并且文本字段保持空白。

在图像中,您可以看到我保存文本文件的位置。

在此处输入图像描述

要阅读我的文本文件,我使用以下代码:

public Text infoText;

void Update()
{
    readTextFile("FileName", "StepNumber")
}

public void readTextFile(string fileName, string stepNumber)
{
    StreamReader txt_Reader = new StreamReader("Assets/Resources/Text_Files/" + fileName + ".txt");

    while(!txt_Reader.EndOfStream)
    {
        string txt_String = txt_Reader.ReadLine();
        if(txt_String.Contains(stepNumber))
        {
            string[] separator = { "_" };
            string[] strList = txt_String.Split(separator, System.StringSplitOptions.RemoveEmptyEntries);

            infoText.text = string.Join("\n", strList.Skip(1));
        }
    }
}

我需要更改哪些内容才能让我的 iPad 可以从文本文件中读取?

编辑:

我的文本文件如下所示:

第 1 步:* 一些文本 * 一些文本

第 2 步:* 一些文本 * 一些文本 * 一些文本

第 3 步:* 一些文本

第 4 步:* 一些文本

所以每个都*应该是我的文本字段中的一个新行。使用我的旧 c# 代码,这没问题,但是使用

var lines = textFiles.text.Split(new char[] { `*` });

foreach(var line in lines)
{
    ...
}

我不知道我该怎么做,我的文本字段显示了第一步的所有两行。

标签: c#unity3d

解决方案


首先来自文件夹的最佳实践Resources

**不要使用它!

请阅读那里的原因。


一般来说,系统路径永远不要使用简单的字符串连接+ "/" +

而是使用Path.Combinewhich 根据执行平台自动使用正确的路径分隔符

Path.Combine(Application.dataPath, "Resources", "Text_Files", fileName + ".txt");

但是,您不能/不能简单地使用 aStreamReader来访问Resources文件夹s(请参阅ResourcesAPI,因为它已打包到构建中,因此您必须Resources.Load

// Here you can use / since this is how Unity stores internal paths
// for load you omit the suffix
TextAsset textFile = Resources.Load<TextAsset>("Text_Files/" + filename);

string fileContent = textFile.text;

或者也看看Resources.LoadAsync不要同时阻塞主线程。


谈到阻塞主线程:你绝对不想做的是在其中使用任何这些,因此每帧都Update执行繁重的 FileIO/Loading !

存储该文件的内容一次,因为它以后不会更改!


根据您的需要,您也可以简单地将文件放在其中的任何其他文件夹中,Assets然后直接使用一个TextAsset字段并通过检查器将其拖到相应的插槽中

public TextAsset textFile;

最后,您可以使用例如逐行浏览这些行

var lines = textFile.text.Split(new char[]{'/n'});
foreach(var line in lines)
{
    ...
}

请注意,这Split也是一个非常繁重的操作,因为它必须解析字符串中的每个字符并创建新的子字符串,因此甚至将这些结果存储在您需要在运行时多次使用它们的字段中的某个地方!


在智能手机上打字,但我希望这个想法很清楚


推荐阅读