如何在C#中读取文件的特定行

时间:2018-07-07 09:58:49

标签: c# forms streamreader

我正在尝试读取文件,但我需要控制文件中的行号。 我尝试使用StreamReader.ReadLine方法,但无法控制行号。

这是我的代码:

private void abrirToolStripMenuItem_Click(object sender, EventArgs e)
    {
        string line;
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            StreamReader sr = new
            StreamReader(openFileDialog1.FileName);

            //Read specified line with StreamReader

            sr.Close();
        }

    }

它是一种形式,设计是西班牙语的。

请任何人可以帮助我吗?

3 个答案:

答案 0 :(得分:4)

您可以使用File.ReadLines()来返回IEnumerable<string>。然后,您可以使用LINQ的Skip()FirstOrDefault()方法来跳过所需的行数,并获取第一个项目(如果没有更多项目,则返回null):

line = File.ReadLines().Skip(lineNumber - 1).FirstOrDefault()

Jeppe评论说这也可以这样写:

line = File.ReadLines().ElementAtOrDefault(lineNumber - 1);

我使用lineNumber - 1是因为它是跳过行,因此您要为第1行指定Skip(0)

如前所述,如果行未超出文件末尾,这会将line设置为null


如果您必须使用 StreamReader,那么您只能循环调用ReadLine(),直到找到所需的行号或结束。文件:

line = null;
for (int i = 0; i < lineNumber; ++i)
{
    if ((line = sr.ReadLine()) == null)
    {
        break; // end of file reached
    }
}

答案 1 :(得分:0)

StreamReader.ReadLine方法允许您逐行读取,这样可以避免将整个文件加载到内存中,这对于大文件来说可能是个问题。

Readline到达文件末尾时将返回null,因此使用内部计数器进行的while循环测试将逐行读取,直到找到所需的行或EOF为止。

void Update()
{
    if (Input.GetKey(KeyCode.UpArrow))
    {
        Debug.Log("Key UpArrow pressed.");
    }
}

答案 2 :(得分:0)

您可以尝试使用此方法:将文件读取到数组,然后可以轻松而有效地控制文件中的行号。

        string output = "";
        string[] lines = File.ReadAllLines(String.Concat(@textBox1.Text, "\\temp\\test.txt"));
        for (int i = 0; i < lines.Length; i++)
        {
            if (lines[i].Contains("Binh"))
            {
                output = lines[i - 1];
            }
        }