我一直在尝试为我的UNI项目逐行读取一个文件。我得到了一个我不确定我理解的错误。我需要你的经验来帮我解决这个问题。
对代码的一些说明:datas是一个列表,它有一个自定义类类型,这个类有3个属性:text1,text2,int1。v是一个简单的对象,具有与datas列表相同的自定义类类型。文本文件中的数据逐行显示,每行包含3个属性的1个值,如下所示:text1value;text2value;int1value。使用for,我试图确保将每一行读入数据列表一次。但是当我运行代码时,它会崩溃,出现以下情况:;拆分结束时(';')线条用红色下划线。我做错了什么,有人能帮帮我吗?
if (File.Exists("example.txt"))
{
StreamReader sr = new StreamReader("example.txt");
int x = 0;
while(!sr.EndOfStream)
{
for(int j=0; j<x; j++)
{
sr.ReadLine();
}
string[] data = sr.ReadLine().Split(';');
v.text1 = data[0];
v.text2 = data[1];
v.int1 = Convert.ToInt32(data[2]);
datas.Add(v);
x++;
}
sr.Close();
}
我认为你正试图按照这些思路做些什么?ReadLine()将自动移动到文件中的下一行。
if (File.Exists("example.txt"))
{
StreamReader sr = new StreamReader("example.txt");
while(!sr.EndOfStream)
{
string[] data = sr.ReadLine().Split(';');
v.text1 = data[0];
v.text2 = data[1];
v.int1 = Convert.ToInt32(data[2]);
datas.Add(v);
}
sr.Close();
}
删除循环:
for(int j=0; j<x; j++)
{
sr.ReadLine();
}
我假设您正在尝试定位到正确的行,但是StreamReader.ReadLine()
已经提前了读取位置。你不需要循环。
所发生的情况是,循环正在读取超过文件末尾的内容,因此,中的readline
string[] data = sr.ReadLine().Split(';');
返回null,因此split()
引发null引用异常。
你的循环就是时间。for()循环只会扰乱流程。我的猜测是,您认为每次要执行ReadLine()时都必须从头开始阅读。但是流将记住您在最后一个ReadLine()之后停止的位置。
if (File.Exists("example.txt"))
{
StreamReader sr = new StreamReader("example.txt");
while(!sr.EndOfStream)
{
string[] data = sr.ReadLine().Split(';');
v.text1 = data[0];
v.text2 = data[1];
v.int1 = Convert.ToInt32(data[2]);
datas.Add(v);
}
sr.Close();
}