Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用StreamReader读取文件的最后一行后执行操作_C#_Wpf_Loops_Streamreader - Fatal编程技术网

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

C# 使用StreamReader读取文件的最后一行后执行操作,c#,wpf,loops,streamreader,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... } } 我的问题发生在读取最后一行之后,因

我正在使用
StreamReader
从文本文件中读取行。对于每一行,我都会执行特定的操作

例如:

System.IO.StreamReader file = new System.IO.StreamReader(fileDirectory); //Open StreamReader
while ((inFileString = file.ReadLine()) != null)
{
    if(something)
    { do stuff... }
}
我的问题发生在读取最后一行之后,因为
while
循环中的代码变得不可访问。这基本上就像我需要被允许在循环自动退出后,再次通过
while
循环一样。如何对从文件中读取的最后一行执行操作


(我可以在循环之外复制操作,但我认为这样做效率很低……

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

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

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

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

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...
    }
}
int totalines(字符串文件路径)
{
使用(StreamReader r=新的StreamReader(文件路径))
{
int i=0;
while(r.ReadLine()!=null)
{
i++;
}
返回i;
}
}
//开放式流阅读器
System.IO.StreamReader file=new System.IO.StreamReader(fileDirectory);

对于(intq=0;q我认为这样的事情看起来可以接受

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);
    }
}

出于好奇,为什么不直接使用
File.ReadAllLines(fileDirectory)
而不是打开一个流然后读取行?这会给你一个可以迭代的数组。@siva.k当文件很大时,读取内存中的所有文本不是一件好事。我认为OP方法很好,因为他的业务逻辑允许逐行处理文件。@pwas啊,是的,很好。@pwas在这种情况下,我建议
File.ReadLines
这是一种懒惰的、更好的替代方法。我猜您已经这样做了,但问一下也无妨。您是否尝试过在调试器中单步检查代码,以确保在文件最后一行的
循环中跳过
?我尝试过这个方法,似乎效果完全相同,但我的问题是:最后一行的操作被忽略了。非常感谢。由于简单,我最终改变了我的答案。@CalvinSmith的答案对我也很有用。