C # StreamReader маркировка вопрос - PullRequest
3 голосов
/ 07 марта 2011

Что я пытаюсь сделать, это запомнить, где я нахожусь в потоке ввода, а затем вернуться туда. Это очень просто в 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;
}

Ответы [ 2 ]

5 голосов
/ 07 марта 2011

На самом деле я не знаю об этом. Однако вы можете использовать что-то вроде стека и просто нажать () и 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();
}
0 голосов
/ 07 марта 2011

Если вы используете StreamReader, вы должны иметь в виду, что это не совсем Stream, но вы можете получить доступ к его свойству BaseStream:

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

Это даст вам текущую позицию в потоке:

long pos = stream.Position;

и позволит вам вернуться туда:

stream.Seek(pos, SeekOrigin.Begin);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...