Подтвердить что ты не робот

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

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

Есть ли максимальная длина для Console.Readline(), если есть способ увеличить это? enter image description here

4b9b3361

Ответ 1

без каких-либо изменений в коде, я считаю, что он будет принимать только 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);
    }

Ответ 2

Проблема с ответом stack72 заключается в том, что если код используется в пакете script, вход больше не буферизирован. Я нашел альтернативную версию в 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();

Ответ 3

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

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

string line = Console.ReadLine();

Ответ 4

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

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!

Ответ 5

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;
    } 

Ответ 6

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

regex_text.exe < my_test_data.txt

Ответ 7

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

Ответ 8

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

Console.SetBufferSize(128, 1024);

Ответ 9

Сохраните ввод текста и используйте 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);
    }
}