Console.ReadLine () максимальная длина?

При запуске небольшого fragmentа кода C #, когда я пытаюсь ввести длинную строку в Console.ReadLine() она кажется отрезанной после нескольких строк.

Максимальная длина до Console.Readline (), если есть способ увеличить это? введите описание изображения здесь

без каких-либо изменений в коде, я считаю, что он будет принимать только 256 символов как максимум – он позволит ввести 254, но зарезервирует 2 для CR и LF

этот метод поможет увеличить лимит

 private static string ReadLine() { Stream inputStream = Console.OpenStandardInput(READLINE_BUFFER_SIZE); byte[] bytes = new byte[READLINE_BUFFER_SIZE]; int outputLength = inputStream.Read(bytes, 0, READLINE_BUFFER_SIZE); //Console.WriteLine(outputLength); char[] chars = Encoding.UTF7.GetChars(bytes, 0, outputLength); return new string(chars); } 

Проблема с ответом stack72 заключается в том, что если код используется в пакетном скрипте, вход больше не буферизирован. Я нашел альтернативную версию на averagecoder.net, которая поддерживает вызов ReadLine. Обратите внимание, что StreamReader также должен иметь аргумент длины, так как он также имеет фиксированный буфер.

 byte[] inputBuffer = new byte[1024]; Stream inputStream = Console.OpenStandardInput(inputBuffer.Length); Console.SetIn(new StreamReader(inputStream, Console.InputEncoding, false, inputBuffer.Length)); string strInput = Console.ReadLine(); 

Это упрощенная версия ответа ара, и это работает для меня.

 int bufSize = 1024; Stream inStream = Console.OpenStandardInput(bufSize); Console.SetIn(new StreamReader(inStream, Console.InputEncoding, false, bufSize)); string line = Console.ReadLine(); 

Это упрощенная версия ответа Петра Матаса . В основном вы можете указать размер буфера только один раз:

 Console.SetIn(new StreamReader(Console.OpenStandardInput(), Console.InputEncoding, false, bufferSize: 1024)); string line = Console.ReadLine(); 

Потому что в конце

 Console.OpenStandardInput(int bufferSize) 

звонки

 private static Stream GetStandardFile(int stdHandleName, FileAccess access, int bufferSize) 

который не использует bufferSize !

ReadLine () внутренне считывает символ по символу до тех пор, пока не встретится -1 или ‘\ n’ или ‘\ r \ n’.

  public virtual String ReadLine() { StringBuilder sb = new StringBuilder(); while (true) { int ch = Read(); if (ch == -1) break; if (ch == '\r' || ch == '\n') { if (ch == '\r' && Peek() == '\n') Read(); return sb.ToString(); } sb.Append((char)ch); } if (sb.Length > 0) return sb.ToString(); return null; } 

Это, по-видимому, является ограничением для консоли Windows. Вы должны попробовать ввести свой файл в файл, а затем передать файл в приложение. Я не уверен, что это сработает, но у него есть шанс.

 regex_text.exe < my_test_data.txt 

В зависимости от вашей ОС вход в командную строку будет принимать только 8191 символ для XP и 2047 символов для NT и Windows 2000. Я предлагаю вам вместо этого передать имя файла, у которого есть длинный ввод и чтение этого файла.

Если вам нужно увидеть весь вывод текста в консоли, я обнаружил, что для его отображения работает следующий код:

 Console.SetBufferSize(128, 1024); 

Сохраните ввод текста и используйте StreamReader.

 using System; using System.IO; static void Main(string[] args) { try { StreamReader sr = new StreamReader("C:\\Test\\temp.txt"); Console.WriteLine(sr.ReadLine().Length); } catch (Exception e) { Console.WriteLine(e.StackTrace); } } 
  • Что такое «непосредственный контекст», упомянутый в стандарте C ++ 11, для которого применяется SFINAE?
  • как читать все файлы внутри определенной папки
  • Создание десериализации свойств, но не сериализация с помощью json.net
  • Что такое Тень?
  • Как преобразовать строку в целое число в C?
  • Сериализовать статический class?
  • Пользовательские имена методов в веб-интерфейсе ASP.NET
  • Как вы создаете запрос LINQ to Entities для непосредственного загрузки дочерних объектов, вместо вызова свойства Reference или Load ()
  • DataGrid получает значения столбцов выбранных строк
  • Для i = 0, почему (i + = i ++) равно 0?
  • C # получить эскиз из файла через windows api
  • Давайте будем гением компьютера.