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