Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Android中使用StreamReader读取文本文件_C#_Android_Unity3d_Streamreader_Android Assets - Fatal编程技术网

C# 在Android中使用StreamReader读取文本文件

C# 在Android中使用StreamReader读取文本文件,c#,android,unity3d,streamreader,android-assets,C#,Android,Unity3d,Streamreader,Android Assets,所以,我正在联合开发视觉小说。该应用程序在pc上运行平稳,但现在我希望它在android上运行,但我的.txt文件中的内容没有显示在屏幕上。我假设错误是StreamingAssets文件夹中的文本文件无法加载,我不知道为什么。这是我的密码: void Start () { path = "jar:file://" + Application.dataPath + "!/assets/StreamingAssets/Dialogue0.txt"; lines = new Lis

所以,我正在联合开发视觉小说。该应用程序在pc上运行平稳,但现在我希望它在android上运行,但我的.txt文件中的内容没有显示在屏幕上。我假设错误是StreamingAssets文件夹中的文本文件无法加载,我不知道为什么。这是我的密码:

 void Start () {
    path = "jar:file://" + Application.dataPath + "!/assets/StreamingAssets/Dialogue0.txt";

    lines = new List<DialogueLine>();
    Example();
}

IEnumerator Example()
{
    if (path.Contains("://"))
    {
        var www = new WWW(path);
        yield return www;
        if (!string.IsNullOrEmpty(www.error))
        {
            Debug.LogError("Can't read");
        }
        LoadDialogue(www.text);
    }
    else
        LoadDialogue(path);
}



 void LoadDialogue(string filename)
{
    string line;
    StreamReader r = new StreamReader(filename);

    using (r)
    {
        do
        {
            line = r.ReadLine();
            if (line != null)
            {
                string[] lineData = line.Split('|');
                if (lineData[0] == "Player")
                {
                    DialogueLine lineEntry = new DialogueLine(lineData[0], "", 0, 0, "");
                    lineEntry.options = new string[lineData.Length - 1];
                    for (int i = 1; i < lineData.Length; i++)
                    {
                        lineEntry.options[i - 1] = lineData[i];
                    }
                    lines.Add(lineEntry);
                }
                else
                {
                    DialogueLine lineEntry = new DialogueLine(lineData[0], lineData[1], int.Parse(lineData[2]), int.Parse(lineData[3]), lineData[4]);
                    lines.Add(lineEntry);
                }
            }
        }
        while (line != null);
        r.Close();
    }
}
void Start(){
path=“jar:file://“+Application.dataPath+”!/assets/StreamingAssets/Dialogue0.txt”;
行=新列表();
示例();
}
IEnumerator示例()
{
if(路径包含(“:/”)
{
var www=新www(路径);
收益率;
如果(!string.IsNullOrEmpty(www.error))
{
LogError(“无法读取”);
}
LoadDialogue(www.text);
}
其他的
对话(路径);
}
无效加载对话框(字符串文件名)
{
弦线;
StreamReader r=新的StreamReader(文件名);
使用(r)
{
做
{
line=r.ReadLine();
如果(行!=null)
{
string[]lineData=line.Split(“|”);
if(线条数据[0]=“播放器”)
{
DialogueLineEntry=新建DialogueLine(lineData[0],“”,0,0,“”);
lineEntry.options=新字符串[lineData.Length-1];
对于(int i=1;i


只需将文件序列化为Appliction.persistentDataPath+文件名,然后轻松读取即可。它将文件保存在android的Windows(AppData/LocalLow/InYourUnityProject)中(在公司名称文件夹下)

我想你的路径应该只有
path=“jar:file://“+Application.dataPath+”!/assets/Dialogue0.txt”
或使用
path=Application.streamingassetpath+”/Dialogue0.txt
insteaddos“Application.streamingassetpath”正在工作?因为根据unity3d中的文档:这是针对pc的,而对于android则是:path=“jar:file://”+Application.dataPath+“/资产/";文档说明它将始终指向每个平台的正确路径。最好始终使用Application.StreamingAssetPath获取StreamingAssets文件夹的位置,因为它将始终指向运行应用程序的平台上的正确位置。除了UWP,我想:)它仍然不起作用。我知道这听起来很愚蠢,但我的www代码做得对吗?或者缺少什么?:(不要直接调用协同例程函数。必须使用
start例程
调用它。这应该是
start例程(示例())
。请参阅副本中关于如何从StreamingAssets读取文件的答案中的
ReadFromStreamingAssets
函数。