Вы можете создать новый класс, который наследуется от StreamReader, и переопределить метод Close; внутри вашего метода Close вызов Dispose (false), который, как указал Мерада, не закрывает поток. То же самое относится и к StreamWriter, конечно.
Однако, похоже, что лучшим решением было бы просто удерживать экземпляры StreamReader и StreamWriter до тех пор, пока они вам могут понадобиться. Если вы уже планируете держать поток открытым, вы также можете оставить StreamReader и StreamWriter открытыми. Если вы правильно используете StreamWriter.Flush и Stream.Seek, вы сможете выполнить эту работу даже при чтении и письме.