当运行一小段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)
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)
小智 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!
归档时间: |
|
查看次数: |
25785 次 |
最近记录: |