我有以下文本文件。任务很简单:忽略蓝色的所有行,并在箭头指示的位置开始读取文件。 (我发布了一个类似的问题,但是人们的回复没有起作用,所以我决定将这些答案结合起来,并且这次正确地提问)
这是我的代码:
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 CLIENT等”
谢谢你们
答案 0 :(得分:4)
您可以跳过StreamReader
,只需使用File.ReadAllLines
加上Skip()
:
var lines = File.ReadAllLines(ofd.FileName).Skip(8).ToArray();
textBox1.Lines = lines;
这假定TextBox已设置为MultiLine(textBox1.MultiLine = true;
)。
附加说明
上面的LINQ查询将返回System.Linq.Enumerable.SkipIterator<string>
;最后的.ToArray()
会将其转换为数组,这需要将其分配给textBox1.Lines
,因为该属性需要string[]
。
答案 1 :(得分:2)
您继续阅读直到文件末尾,用每个连续的行替换文本框的内容。如果你真的希望只是第一条未开发的行,你就需要摆脱循环:
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++;
}
答案 2 :(得分:1)
while (!sr.EndOfStream)
{
string line = sr.ReadLine();
if (i > 8)
{
textBox1.Text += line + Environment.NewLine;
}
i++;
}
阅读文件的简单方法是使用File.ReadLines
string fileLines = File.ReadLines(ofd.FileName).Skip(8).Aggregate((current, next) => current + Environment.NewLine + next);
textBox1.Text = fileLines;