Страницы

Поиск по вопросам

вторник, 4 июня 2019 г.

Ввод Readline ограничен 266 символами. Как исправить

Использую для консоли следующий код (С#)
Console.Write("Код гугл "); string google_map = Console.ReadLine();
Нужно ввести код карты Google, он достаточно длинный и не влазит((( Очень долго искал ответ. Пожалуйста помогите


Ответ

Это, как оказалось, ограничение консоли
Попробуйте такой метод:
var bufsize = 320; Stream stream = Console.OpenStandardInput(bufsize); TextReader inReader = (stream == Stream.Null) ? StreamReader.Null : TextReader.Synchronized( new StreamReader(stream, Console.InputEncoding, false, bufsize, true)); Console.SetIn(inReader);
Выставьте размер буфера сколько нужно.
Код честно подсмотрен ILSpy'ем в методе Console.In
Реальное ограничение — 254 символа: 256 байт размер буфера, плюс два байта резервируется под CRLF. Аналогично в случае ручной установки bufsize реальный размер будет на два байта меньше.
В реальности, сделать буфер меньше, чем 256, у меня не получилось.

Если вы захотите правильно обрабатывать символы других языков и выставите Console.InputEncoding = Encoding.Unicode;, не забывайте, что ваш буфер будет расходовать по два байта на символ. Если вы, например, установите размер буфера в 320, то это даст всего лишь 160 юникодных символов (и будет поднято автоматически до 256).

Комментариев нет:

Отправить комментарий