47 votes

Longueur maximale de Console.ReadLine() ?

Lors de l'exécution d'un petit morceau de code C#, lorsque j'essaie d'entrer une longue chaîne dans Console.ReadLine() elle semble se couper après quelques lignes.

Existe-t-il une longueur maximale pour Console.Readline(), si oui, y a-t-il un moyen de l'augmenter ? entrez la description de l'image ici

34voto

ara Points 81

Un problème avec la réponse de stack72 est que si le code est utilisé dans un script batch, l'entrée n'est plus mise en mémoire tampon de ligne. J'ai trouvé une version alternative sur averagecoder.net qui conserve l'appel ReadLine. Notez que StreamReader doit également avoir un argument de longueur, car il a également un tampon fixe.

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

33voto

stack72 Points 5146

Sans aucune modification du code, il ne prendra qu'un maximum de 256 caractères, c'est-à-dire ; Il permettra d'en inscrire 254 et en réservera 2 pour CR et LF.

La méthode suivante aidera à augmenter la limite :

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

22voto

Petr Matas Points 221

Ceci est une version simplifiée de la réponse d'ara et cela fonctionne pour moi.

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

string line = Console.ReadLine();

18voto

hoang Points 860

Ceci est une version simplifiée de la réponse de Petr Matas. Fondamentalement, vous ne pouvez spécifier la taille du tampon qu'une seule fois comme suit :

 Console.SetIn(new StreamReader(Console.OpenStandardInput(),
                               Console.InputEncoding,
                               false,
                               bufferSize: 1024));
string line = Console.ReadLine();

Parce qu'au final

 Console.OpenStandardInput(int bufferSize)

appels

 private static Stream GetStandardFile(int stdHandleName, FileAccess access, int bufferSize)

qui n'utilise pas bufferSize !

7voto

AKM Points 410

Console.ReadLine() a une limite de 254 caractères.

J'ai trouvé la seule ligne de code ci-dessous ici . Cela semblait faire l'affaire.

Console.SetIn(nouveau StreamReader(Console.OpenStandardInput(8192)));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X