如何在C#中从控制台读取很长的输入?

如何在C#中从控制台读取很长的输入?,c#,console,windows-console,C#,Console,Windows Console,我需要在C#中从控制台加载每一条很长的线,最多65000个字符。Console.ReadLine本身有254个字符的限制(+2个用于转义序列),但我可以使用: static string ReadLine() { Stream inputStream = Console.OpenStandardInput(READLINE_BUFFER_SIZE); byte[] bytes = new byte[READLINE_BUFFER_SIZE]; int outputLeng

我需要在C#中从控制台加载每一条很长的线,最多65000个字符。Console.ReadLine本身有254个字符的限制(+2个用于转义序列),但我可以使用:

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

…为了克服这个限制,对于最多8190个字符(+2个转义序列)-不幸的是,我需要输入更大的行,当READLINE_BUFFER_SIZE设置为大于8192的任何值时,VS BUFFER中会显示错误“没有足够的存储空间来处理此命令”。应该将BUFFER设置为65536。我已经尝试了几种解决方案,但我仍在学习,没有一个超过1022或8190个字符,我如何才能将该限制提高到65536?提前感谢。

尝试Console。使用StringBuilder阅读

        StringBuilder sb =new StringBuilder();
        while (true) {
            char ch = Convert.ToChar(Console.Read());
            sb.Append(ch);
            if (ch=='\n') {
                break;
            }
        }

您必须在
main()
方法中添加以下代码行:

byte[] inputBuffer = new byte[4096];
                Stream inputStream = Console.OpenStandardInput(inputBuffer.Length);
                Console.SetIn(new StreamReader(inputStream, Console.InputEncoding, false, inputBuffer.Length));

然后可以使用Console.ReadLine();阅读长用户输入。

我同意Manmay的观点,这似乎对我有效,我还尝试保留默认的stdin,以便以后可以恢复:

        if (dbModelStrPathname == @"con" ||
            dbModelStrPathname == @"con:")
        {
            var stdin = Console.In;

            var inputBuffer = new byte[262144];
            var inputStream = Console.OpenStandardInput(inputBuffer.Length);
            Console.SetIn(new StreamReader(inputStream, Console.InputEncoding, false, inputBuffer.Length));

            dbModelStr = Console.In.ReadLine();

            Console.SetIn(stdin);
        }
        else
        {
            dbModelStr = File.ReadAllText(dbModelStrPathname);
        }

你不能将输入转储到临时文件中,然后在控制台中简单地传递文件名吗?我不能键入超过8190个字符,它不再允许我输入。我可以将数据保存到文件中,但我需要一种获得大量输入的方法。您的方案是什么?我不确定您是否在尝试解决正确的问题。听起来控制台并不是您输入的最佳选择。比如说,你应该考虑其他的输入方法吗?最糟糕的情况是,你可以制作一个看起来像控制台的应用程序,它有很大的缓冲区…?你必须有一只非常活跃的猫来测试这种代码。这确实有效,谢谢:)我也尝试过使用它,但我使用了\r\n,而不是\n,它只是跳过了break指令。你们到底是如何让它工作的。我需要一个控制台应用程序,可以采取大整数或只是真正的yyy大的数字,我似乎无法让这个工作。。我只能使用
Console.SetIn(新的StreamReader(Console.OpenStandardInput(8192))获得要提高的最大输入