C# 指定行数后如何开始读取文件
我有以下文本文件。任务很简单:忽略所有蓝色的行,从箭头指示的位置开始读取文件。(我发布了一个类似的问题,但人们的回答不起作用,所以我决定把答案结合起来,这次适当提问) 这是我的密码:C# 指定行数后如何开始读取文件,c#,file,stream,C#,File,Stream,我有以下文本文件。任务很简单:忽略所有蓝色的行,从箭头指示的位置开始读取文件。(我发布了一个类似的问题,但人们的回答不起作用,所以我决定把答案结合起来,这次适当提问) 这是我的密码: private void button1_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == System.Windo
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
StreamReader sr = new StreamReader(File.OpenRead(ofd.FileName));
int i = 1;
while (!sr.EndOfStream)
{
if (i > 8)
textBox1.Text = sr.ReadLine(); // As soon as i get to the arrow (8th line, I want to display the line in the textbox in my application.)
sr.ReadLine();
i++;
}
}
}
}
我的问题是:我认为我的while循环根本不对。当我试图显示while循环包含的内容时,文本框中不会弹出任何内容。其次,这是我通过上面的代码得到的输出:
这显然是错误的,我甚至不知道0小计和671etc从何而来
我希望输出是第一条箭头:“1个MANDT客户机等”
谢谢大家您一直阅读到文件结尾,用每一行替换文本框的内容。如果您真的只想要第一个未跳过的行,则需要中断循环:
while (!sr.EndOfStream)
{
if (i > 8)
{
textBox1.Text = sr.ReadLine();
break;
}
sr.ReadLine();
i++;
}
或者如果你想要所有未屏蔽的线路
while (!sr.EndOfStream)
{
string text = sr.ReadLine();
if (i > 8)
textBox1.Text += text + "\n";
i++;
}
- 您不向文本框添加文本。你重写它李>
- 当i>8时,你读两行,只写一行
读取文件的简单方法是使用
您可以跳过
StreamReader
,只需使用File.ReadAllLines
,并附加skip()
:
var lines = File.ReadAllLines(ofd.FileName).Skip(8).ToArray();
textBox1.Lines = lines;
这假设文本框是为多行设置的(textBox1.MultiLine=true;
)
附加说明
上面的LINQ查询将返回一个
System.LINQ.Enumerable.SkipIterator
;最后的.ToArray()
将其转换回一个数组,需要将其分配给textBox1.Lines
,因为该属性需要一个字符串[]
您选择了正确的文件吗?您是否可以在git hub或其他共享上共享该文件?我记得读了第一篇文章,我想帮你。我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。@jcwrequests让我知道如果你还想帮助我上传,让我试试。。另外,当它声明“.ToArray()”@user2788405-var-lines
将是.ToArray()
创建的数组时,它将执行wat数组。.ToArray()
可能是不必要的,因为ReadAllLines
返回一个数组。@user2788405-文本框。Lines
需要一个字符串[]
(数组),但是不带的查询将返回一个系统.Linq.Enumerable.skiperator,它不会被隐式转换。.ToArray()
只是将查询结果转换成一个数组。请检查您的电子邮件,我需要更多的说明
string fileLines = File.ReadLines(ofd.FileName).Skip(8).Aggregate((current, next) => current + Environment.NewLine + next);
textBox1.Text = fileLines;
var lines = File.ReadAllLines(ofd.FileName).Skip(8).ToArray();
textBox1.Lines = lines;