c# - 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)
{
...
}
我不知道我该怎么做,我的文本字段显示了第一步的所有两行。
解决方案
**不要使用它!
请阅读那里的原因。
一般来说,系统路径永远不要使用简单的字符串连接+ "/" +
!
而是使用Path.Combine
which 根据执行平台自动使用正确的路径分隔符
Path.Combine(Application.dataPath, "Resources", "Text_Files", fileName + ".txt");
但是,您不能/不能简单地使用 aStreamReader
来访问Resources
文件夹s(请参阅Resources
API,因为它已打包到构建中,因此您必须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
也是一个非常繁重的操作,因为它必须解析字符串中的每个字符并创建新的子字符串,因此甚至将这些结果存储在您需要在运行时多次使用它们的字段中的某个地方!
在智能手机上打字,但我希望这个想法很清楚
推荐阅读
- ionic-framework - Ionic-React 自定义动画过渡渲染页面两次
- google-apps-script - GAS 库中导出了哪些成员?
- c# - 如何将 ECDsa 公钥和私钥保存为字符串
- algorithm - 为什么递归合并排序优于迭代合并排序,即使后者具有辅助空间复杂度?
- python - 如何将两列/多组 groupby() objetc 转换为数据框?
- c++ - 谷歌 ORTools C++ Makefile
- android - 有什么方法可以在 Android 设备之间传输数据而无需用户接受连接?
- firebase - 数据库未存储在 firebase 数据库中
- bazel - 特定编译器的编译器标志
- python - 您可以使用 sphinx-apidoc 仅对子模块进行自动文档化吗?