在StreamReader中移动指针

时间:2013-11-13 18:32:36

标签: c# streamreader

我有一个包含块(标题和正文)的文件。我需要分开这些街区。标题是'他=',身体可以是任何东西,例如'巨石很重'。所以典型的文件看起来像

他=阳光灿烂的日子=巨石是沉重的=大家好吗

我正在使用StreamReader的Read方法逐个字符地读取。

在程序中,使用if语句检查h e和=以确定其标头。但考虑一下这个词。我需要一种方法将文件指针移回h,因为它不是标题。

有没有办法在StreamReader中移动文件指针?上面的标题正文示例只是一个玩具示例供解释。

1 个答案:

答案 0 :(得分:0)

由于StreamReader仅向前,因此您无法向后退。然而,一切都不会丢失。一种常见的策略是使用 buffer 变量并检查它。这是一些粗略的代码:

var buffer = new StringBuilder();

while(streamReader.Peek() >= 0)
{
    //Add latest character to buffer
    buffer.append(streamReader.Read());

    //Check the three rightmost characters in the buffer for the occurance of he=
    if(buffer.Length >= 3 && buffer.ToString().Substr(buffer.Length-3, 3) == "he=")
    {
        //We have found new header. Now we trim the header from the rest of the buffer to get the body
        var newBody = buffer.ToString().Substr(0,buffer.Length-3);
        //I'm assuming you'll be adding the body somewhere
        bodies.Add(newBody);
        //Now we clear the buffer
        buffer.Clear();
    }
}
//What's left in the buffer is also a body
bodies.Add(buffer.ToString());