我有以下代码:
StreamReader StreamReader = new StreamReader("File.txt");
string Line = "";
while((Line = StreamReader.ReadLine()) != null)
{
string Value = Line.Trim();
string Value2 = StreamReader.ReadLine();
int CursorValue = StreamReader.BaseStream.Position;
if(Condition)
{
StreamReader.BaseStream.Position = SOMETHING_ELSE;
Console.WriteLine(StreamReader.ReadLine());
}
StreamReader.BaseStream.Position = CursorValue;
}
有人可以告诉我我应该在哪里使用StreamReader.DiscardBufferedData()
吗?
答案 0 :(得分:4)
来自MSDN:
使用DiscardBufferedData方法重置StreamReader对象的内部缓冲区。只有当内部缓冲区和BaseStream的位置不匹配时才需要调用此方法。
这是一个小例子:
Stream s = new MemoryStream();
StreamReader sr = new StreamReader(s);
// Read things here.
s.Position = 10;
sr.DiscardBufferedData(); // reader now reading from position 0
sr.BaseStream.Seek(10, SeekOrigin.Begin); // Reader now reading from location 10.
在你的情况下:
StreamReader.BaseStream.Position = SOMETHING_ELSE;
sr.DiscardBufferedData();
StreamReader.BaseStream.Seek(SOMETHING_ELSE, SeekOrigin.Begin);
Console.WriteLine(StreamReader.ReadLine());
并且不要忘记再次回到:
StreamReader.BaseStream.Position = CursorValue;
sr.DiscardBufferedData();
StreamReader.BaseStream.Seek(CursorValue, SeekOrigin.Begin);
答案 1 :(得分:1)
使用DiscardBufferedData方法重置内部缓冲区 StreamReader对象。只有在需要时才需要调用此方法 内部缓冲区的位置与BaseStream不匹配。这些 当您将数据读入缓冲区时,位置可能会不匹配 然后在底层流中寻找新的位置。这种方法减慢了 性能,应该只在绝对必要时使用,例如 当您想要读取StreamReader的部分内容时 对象不止一次。有关常见I / O任务的列表,请参阅通用I / O. 任务。