Console.ReadLine()的最大长度?

当运行一小段C#代码时,当我尝试在Console.ReadLine()input一个长string时,它似乎在几行后切断。

是否有一个最大长度的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的答案是一个问题,如果代码在批处理脚本中使用,input不再是行缓冲。 我在averagecoder.net上find了一个可以保持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(); 

这是ara答案的简化版本,适用于我。

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

这是Petr Matas答案的简化版本。 基本上你可以只指定一次缓冲区大小如下:

 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控制台的限制。 你应该尝试把你的input文件,然后pipe道文件到应用程序。 我不确定这是否会奏效,但它有一个机会。

 regex_text.exe < my_test_data.txt 

根据你的操作系统,命令行input将只接受8191字符的XP和2047字符的NT和Windows 2000.我build议你传递一个文件名,而不是你的长input,并阅读该文件。

如果是在控制台中看到文本的全部输出,我发现下面的代码可以显示它:

 Console.SetBufferSize(128, 1024); 

将input保存为文本并使用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); } }