我试图做的是记住我在输入流中的位置,然后再回到那里。在java中使用mark()和reset()非常简单,但我不知道如何在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;
}
发布于 2011-03-07 19:38:13
事实上,据我所知没有。但是,您可以使用类似Stack的东西,并简单地将()和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();
}
发布于 2011-03-07 19:49:34
如果它是您正在使用的StreamReader
,那么您必须记住,它本身并不是一个Stream
,但是您可以访问它的BaseStream
属性:
StreamReader reader = new StreamReader("test.txt");
Stream stream = reader.BaseStream;
它将提供您在流中的当前位置:
long pos = stream.Position;
它将允许你搬回原处:
stream.Seek(pos, SeekOrigin.Begin);
https://stackoverflow.com/questions/5219152
复制相似问题