我想要做的是记住我在输入流中的位置,然后再回到那里。 在使用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;
}
答案 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);