Как Вы сбрасываете.NET C# курсор TextReader назад к стартовой точке?

Вы можете попробовать использовать встроенную таблицу dbo.Numbers:

SELECT TOP 21
    REPLICATE('*', 22-n) AS output
FROM dbo.Numbers
ORDER BY n;

Если dbo.Numbers недоступно в вашей версии SQL Server, просто используйте последовательность некоторого вида.

Демонстрация

24
задан Brendan 6 May 2009 в 20:25
поделиться

3 ответа

Это зависит от TextReader . Если это StreamReader , вы можете использовать:

sr.BaseStream.Position = 0;
sr.DiscardBufferedData();

(Предполагая, что базовый поток, конечно, доступен для поиска.)

Другие реализации TextReader могут не иметь 1140524] концепция "перемотки назад", точно так же, как IEnumerable нет. Во многих отношениях вы можете думать о TextReader как о прославленном IEnumerable . У него есть методы для чтения целых блоков данных за раз, чтения строк и т. Д., Но в основном это тип «прямого чтения».

РЕДАКТИРОВАТЬ: Я не верю, что StringReader поддерживает какой-либо вид перемотки назад - вам лучше воссоздать StringReader из исходной строки, если вы можете.

37
ответ дан 28 November 2019 в 23:21
поделиться

Если это StreamReader , и , если этот поток поддерживает поиск, то:

        reader.BaseStream.Seek(0, SeekOrigin.Begin);
        reader.DiscardBufferedData();

Однако это невозможно на произвольном ] ЧтениеТекст S. Возможно, вы могли бы прочитать все это как строку, а затем повторно использовать StringReader ?

10
ответ дан 28 November 2019 в 23:21
поделиться

Ищите, и вы найдете.

Seek(0, SeekOrigin.Begin);

TextReader является производным от StreamReader . StreamReader содержит свойство BaseStream

-3
ответ дан 28 November 2019 в 23:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: