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;