我在从程序外部的文本文件读取的脚本中出现错误。 错误是
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.(' '))并解析创建的数组中的每个项目。
几个问题:
fs.Read(b, 0, b.Length)
可以读取一个字节,也可以读取全部字节。读取此类文本文件的“正常”方法是使用 StreamReader 而不是 FileStream。 Streamreader 有一个用于打开文件的便捷构造函数,其工作方式相同,但它可以逐行读取,并且更加方便。这是文档和一个很好的示例:https://msdn.microsoft.com/en-us/library/f2ke0fzy(v=vs.110).aspx
如果您坚持直接从文件流读取,则需要
b
),或
由于您的字符串缓冲区包含文件中的所有字符,因此您实际上正在尝试将
"12\n5\n6\n0"
解析为整数,并且解析器因换行符而窒息。由于换行符不是数字,因此它不知道如何解释它们。
TextAsset
数据类型来访问Unity3D中的文本文件内容。
尝试以下代码,using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Global : MonoBehaviour
{
public TextAsset textFile;
// Start is called before the first frame update
void Start()
{
getFileContents();
}
// Update is called once per frame
void Update()
{
}
void getFileContents() {
string data = textFile.text.Split('\n');
for(line in data) {
Debug.Log(line);
}
}
}
import System.IO;
var filename = "data.txt";
void Start () {
var source = new StreamReader(Application.dataPath + "/" + filename);
var fileContents = source.ReadToEnd();
source.Close();
var lines = fileContents.Split("\n");
for(line in lines) {
print(line);
}
}