c#streamreader textfiles读取行之前/之后

时间:2010-08-30 13:15:29

标签: c# text-files

在某些特殊情况下,我需要在当前位置之前和之后使用一些线条。 E.g。

public string[] getLines(string value, int linesBefore, int linesAfter)
{
    _streamReader = new StreamReader("file.tmp");
    string[] returnValue;

    string line =  _streamReader.ReadLine();
    while (Line.instr() < 0)
    {
       Line = _streamReader.ReadLine();
    }

    returnValue = READ "value linesBefore"
                  + Line // Current Line
                  + READ "value linesAfter"
}

最后3行是我需要的。

有一种简单的方法吗?

3 个答案:

答案 0 :(得分:0)

如果您的文件不是太大,您可以只读取整个文件并将每一行存储到List<String>中,然后抓取最后三行。如果您的文件非常大,请使用Queue类 - 将行推入队列并调用TrimToSize以使其保持在所需的行数。当然,要获得“后续行”,你必须再读一行。

答案 1 :(得分:0)

您可以在循环中保留前一行的副本,然后在循环后使用附加的ReadLine()。

pubic string[] getLines(string value, int linesBefore, int linesAfter){ 

_streamReader = new StreamReader("file.tmp"); 
string[] returnValue;

string Line =  _streamReader.ReadLine(); 
string prevLine;
while (Line.instr() < 0) 
{ 
   prevLine = Line;
   Line = _streamReader.ReadLine(); 
} 

string postLine = _streamReader.ReadLine();

returnValue = prevLine + Line + postLine;
} 

如果你想要在之前/之后有多行,请为prevLines创建一个“滚动”数组,并使用while循环将postLines存储在使用更多ReadLine调用的数组中。

答案 2 :(得分:0)

        using (StreamReader _streamReader = new StreamReader("file.tmp"))
        {
            string[] returnValue;

            string previousLine = null;
            string line = _streamReader.ReadLine();
            while (line.instr() < 0)
            {
                previousLine = line;
                line = _streamReader.ReadLine();
            }

            string[] returnValue = new string[] { 
                previousLine, 
                line, 
                _streamReader.ReadLine() 
            };

        }