Console.ReadLine()最大长度?

Kyl*_*ndt 34 c#

当运行一小段C#代码时,当我尝试输入一个长字符串时Console.ReadLine(),似乎在几行后切断了.

Console.Readline()是否有最大长度,如果有,有办法增加吗? 在此输入图像描述

ara*_*ara 32

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();
Run Code Online (Sandbox Code Playgroud)

  • 绝对没有理由仅使用.Length属性来创建数组(inputBuffer)。彼得·马塔斯(Petr Matas)的答案完全相同,只是它不使用混乱/未使用的数组。 (2认同)

sta*_*k72 30

没有对代码进行任何修改,它最多只需要256个字符,即; 它将允许输入254并为CR和LF保留2.

以下方法将有助于增加限制:

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);
    }
Run Code Online (Sandbox Code Playgroud)

  • 好的解决方案 有关替代方案,请参阅[此后来的答案](http://stackoverflow.com/a/6081967/1336654),在SO上找到问题的副本.它使用`Console.SetIn`来改变"in"流. (2认同)

小智 19

这是ara答案的简化版本,对我有用.

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

string line = Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)


hoa*_*ang 13

这是Petr Matas答案的简化版本.基本上,您只能指定一次缓冲区大小,如下所示:

Console.SetIn(new StreamReader(Console.OpenStandardInput(),
                               Console.InputEncoding,
                               false,
                               bufferSize: 1024));
string line = Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

因为最终

Console.OpenStandardInput(int bufferSize)
Run Code Online (Sandbox Code Playgroud)

电话

private static Stream GetStandardFile(int stdHandleName, FileAccess access, int bufferSize)
Run Code Online (Sandbox Code Playgroud)

哪个不使用bufferSize!


AKM*_*AKM 5

Console.ReadLine() 最多254个字符。

我在这里找到下面的单行代码。这似乎可以解决问题。

Console.SetIn(new StreamReader(Console.OpenStandardInput(8192)));