使用StreamReader读取文件的最后一行后执行操作

时间:2014-08-28 19:36:25

标签: c# wpf loops streamreader

我使用StreamReader来读取文本文件中的行。对于每一行,我都有特定的操作。

示例:

System.IO.StreamReader file = new System.IO.StreamReader(fileDirectory); //Open StreamReader
while ((inFileString = file.ReadLine()) != null)
{
    if(something)
    { do stuff... }
}

我的问题发生在读取最后一行之后,因为while循环内的代码变得无法访问。它基本上就像我需要被允许在自动退出后再次通过while循环。如何在从文件读取的最后一行上执行操作?

(我可以复制循环外的操作,但我认为这样效率很低......)

3 个答案:

答案 0 :(得分:2)

我认为这样的事情看起来是可以接受的。

using (StreamReader file = new StreamReader(@"D:\Downloads\testfile.txt"))
{
    string str = "";
    while ((str = file.ReadLine()) != null || str == null)
    {
        if (str == null)
        {
            Console.WriteLine("Hey! We've already passed the EOF!");
            break;
        }

        Console.WriteLine(str);
    }
}

答案 1 :(得分:1)

也许注意最好的解决方案,但......

int TotalLines(string filePath)
{
    using (StreamReader r = new StreamReader(filePath))
    {
        int i = 0;
        while (r.ReadLine() != null)
        {
            i++;
        }

        return i;
    }
}

//Open StreamReader
System.IO.StreamReader file = new System.IO.StreamReader(fileDirectory);

for (int q = 0; q <= TotalLines + 1; i++)
{
    file.ReadLine();

    if (q == int + 1)
    { 
        //do stuff...
    }
}

它不是最干净的代码,但我从来都不是完美的。

答案 2 :(得分:0)

您是否尝试过使用Peek()方法?

using (var strReader = new System.IO.StreamReader())
{
    while (strReader.Peek() > -1)
    {
        var line = strReader.ReadLine();

        // Do Something
    }
    strReader.Close();
}