C#StreamReader标记问题

时间:2011-03-07 11:32:49

标签: c# .net streamreader

我想要做的是记住我在输入流中的位置,然后再回到那里。 在使用mark()和reset()的java中非常简单,但我不知道如何在c#中实现这一点。没有这样的方法。

例如

public int peek() 
{
    try 
    {
        file.x; //in java file.mark(1)
        int tmp = file.read();
        file.+ //in java file.reset();
        return tmp;
    } 
    catch (IOException ex) {} 
    return 0;
}

2 个答案:

答案 0 :(得分:5)

确实我不知道。但是你可以使用类似Stack的东西,只需按下Push()和Pop()就可以按顺序上下移动你的标记:

FileStream file = new FileStream(...);

try {
  Stack<long> markers = new Stack<long>();

  markers.Push(file.Position);

  file.Read(....);

  file.Seek(markers.Pop(),SeekOrigin.Begin);
} finally {
  file.Close();
}

基于词典的另一个想法:

FileStream file = new FileStream(...);

try {
  Dictionary<string,long> markers = new Dictionary<string,long>();

  markers.Add("thebeginning",file.Position);

  file.Read(....);

  file.Seek(markers["thebeginning"],SeekOrigin.Begin);
} finally {
  file.Close();
}

答案 1 :(得分:0)

如果您使用的是StreamReader,则必须记住它本身并不是Stream,但您可以访问其BaseStream属性:

StreamReader reader = new StreamReader("test.txt");
Stream stream = reader.BaseStream;

它将为您提供您在流中的当前位置:

long pos = stream.Position;

它会让你回到那里:

stream.Seek(pos, SeekOrigin.Begin);