繁体   English   中英

从Unity3d读取文本文件

[英]Reading a text file from Unity3d

我从程序外部的文本文件读取脚本时出错。 错误是

FormatException:输入字符串的格式不正确

它的明显问题是什么,但我只是不明白为什么它无法正确阅读。 我的代码:

using (FileStream fs = new FileStream(@"D:\Program Files (x86)\Steam\SteamApps\common\blabla...to my file.txt))
        {
            byte[] b = new byte[1024];
            UTF8Encoding temp = new UTF8Encoding(true);

            while (fs.Read(b, 0, b.Length) > 0)
            {
                //Debug.Log(temp.GetString(b));
                var converToInt = int.Parse(temp.GetString(b));
                externalAmount = converToInt;

            }
            fs.Close();
        }

文本文件具有4行值。 每条线代表游戏中的一个对象。 我要做的就是读取这些值。 不幸的是我得到了我无法解释的错误。 那么,如何在不出错的情况下读取新行?

文本文件如下所示

12
5
6
0

不再需要4行,所有值都在单独的行上。

您的新Filestream()上没有结尾“”; 但是我会假设将代码粘贴到Stackoverflow时会出现问题。

您收到的错误很可能是因为您试图将空格解析为int,这将无法正常工作。 输入字符串(在这种情况下为“”)的格式不正确(int)。

在空格上分割行( Split。('') )并解析创建的数组中的每个项目。

几个问题:

问题1

fs.Read(b, 0, b.Length)可以读取一个字节或全部读取。 读取这样的文本文件的正常方法是使用StreamReader而不是FileStream。 Streamreader具有一个便利的构造函数,用于打开以相同方式工作的文件,但它可以逐行读取并且更加方便。 这是文档和一个很好的示例: https : //msdn.microsoft.com/zh-cn/library/f2ke0fzy(v=vs.110).aspx

如果您坚持直接从文件流中读取,则要么需要

  • 在循环外解析您的字符串,以便可以确定已将整个文件读入字节缓冲区( b ),或者

  • 逐字节解析新内容,直到找到特定的分隔符(例如空格或换行符),然后解析缓冲区中的所有内容并重置缓冲区。

问题2

您的缓冲区很可能已经包含了文件中的所有内容。 您的文件非常小,即使没有保证,文件流对象也可能一次读取整个内容。

由于您的字符串缓冲区包含文件中的所有字符,因此您实际上试图将"12\\n5\\n6\\n0"解析为整数,并且解析器阻塞了换行符。 由于换行符是非数字的,因此不知道如何解释它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM