2012-03-17 29 views
5

Necesito cargar una larga línea larga desde la consola en C#, hasta 65000 caracteres. Console.ReadLine en sí tiene un límite de 254 caracteres (+2 para secuencias de escape), pero puedo usar esto:¿Cómo se lee una entrada muy larga desde la consola en C#?

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

... para superar ese límite, para un máximo de 8190 caracteres (2 para las secuencias de escape): desafortunadamente necesito ingresar WAY la línea más grande, y cuando READLINE_BUFFER_SIZE está configurado a algo mayor que 8192, aparece el error "No hay suficiente espacio de almacenamiento disponible para procesar este comando" en VS. Buffer debería estar configurado en 65536. He intentado un par de soluciones para hacerlo, pero todavía estoy aprendiendo y ninguno superó los 1022 u 8190 caracteres, ¿cómo puedo aumentar ese límite a 65536? Gracias por adelantado.

+1

¿No puedes volcar la entrada a un archivo temporal y simplemente pasar el nombre del archivo en la consola? – digEmAll

+0

No puedo escribir más de 8190 caracteres, simplemente ya no me permitirá ingresar. Puedo guardar los datos en el archivo, pero necesito una forma de obtener una gran cantidad de información. –

+1

¿Cuál es su situación? No estoy seguro de que estés tratando de resolver el problema correcto – Onkelborg

Respuesta

1

tratar Console.Read con StringBuilder

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

Eso funcionó, gracias :) He intentado usar esto también, pero he usado \ r \ n, not \ n, y simplemente salté la instrucción break. –

+0

¿Cómo lograron ustedes que esto funcione? Necesito una aplicación de consola que pueda tomar BigIntegers o simplemente muchísimos números, y parece que no puedo hacer que funcione. Solo puedo obtener la máxima entrada posible con 'Console.SetIn (new StreamReader (Console.OpenStandardInput (8192))); ' – Chisx

1

Hay que añadir siguiente línea de código en su main() método:

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

continuación, puede utilizar Console.ReadLine(); para leer la entrada larga del usuario.

Cuestiones relacionadas