Я наткнулся на ваш пост и был довольно разочарован тем, что это невозможно. Я быстро взломал что-то, что работает: просто избегайте чтения строк:
Stream stream = new MemoryStream((new System.Text.ASCIIEncoding().GetBytes(mystring)), false);
reader = new StreamReader(stream, new System.Text.ASCIIEncoding());
Это не красиво, и в нем используется ASCII (что мне и было нужно). Обратите внимание, что с другой кодировкой это не будет работать, так как вы будете искать n-й байт, который не равен n-му символу. Если вам это нужно, вы можете сделать что-то вроде
Stream stream = new MemoryStream((new System.Text.UTF32Encoding().GetBytes(mystring)), false);
reader = new StreamReader(stream, new System.Text.UTF32Encoding());
, поскольку UTF32 является единственным форматом Unicode фиксированной длины.
Теперь вы можете сделать
reader.BaseStream.Position = wherever; // or wherever * 4 for the UTF32 variety,
// in your case, the beginning of the string,
// which is always 0 obviously
reader.DiscardBufferedData();