2015-01-30 5 views
0

У меня есть строка, которая составляет около 1.5 килобайт текста. Я хочу, чтобы мое консольное приложение прочитало его, но только первые 255 символов могут быть вставлены. Как увеличить этот предел? Я буквально читать его с помощью Console.ReadLine() в режиме отладки под визуальным студии 2013Увеличить буфер для Console.Readline?

+0

Поиск [MSDN] (https://msdn.microsoft.com/en-us/library/system.console.readline%28v=vs.110%29.aspx) для 'Console.Readline' этого комментария" To читать более длинные строки, вызывать метод OpenStandardInput (Int32) «должен был привести вас к [OpenStandardInput] (https://msdn.microsoft.com/en-us/library/5kdtbb63 (v = vs.110) .aspx) –

+2

I Я приму это в качестве ответа. Я написал 'using (var r = new StreamReader (Console.OpenStandardInput (2048))) {myvar = r.ReadLine(); } 'он работал отлично. Я думал, что ответ будет в app.config или Console.IncreaseBuffer (размер) или что-то в этом роде. –

+0

Я не проверял причину, но, похоже, мой последний комментарий имеет проблемы. Он не поднимает полную линию. –

ответ

2

От MSDN что-то вроде этого должно работать:

Stream inputStream = Console.OpenStandardInput(); 
byte[] bytes = new byte[1536]; // 1.5kb 
int outputLength = inputStream.Read(bytes, 0, 1536); 

вы можете преобразовать массив байтов в строку с чем-то например:

var myStr = System.Text.Encoding.UTF8.GetString(bytes); 
+0

Принять в 4m –

+0

Хороший ответ. Не смотрел в MSDN; По умолчанию, я бы взял максимально возможное, хотя. –

2

Это уже обсуждалось пару раз. Позвольте мне представить вам лучшее решение я видел до сих пор (Console.ReadLine() max length?)

Концепция: verriding функцию Readline с OpenStandartInput (как ребята в комментариях упомянутых):

Реализация:

private static string ReadLine() 
{ 
    Stream inputStream = Console.OpenStandardInput(READLINE_BUFFER_SIZE); // declaring a new stream to read data, max readline size 
    byte[] bytes = new byte[READLINE_BUFFER_SIZE]; // defining array with the max size 
    int outputLength = inputStream.Read(bytes, 0, READLINE_BUFFER_SIZE); //reading 
    //Console.WriteLine(outputLength); - just for checking the function 
    char[] chars = Encoding.UTF7.GetChars(bytes, 0, outputLength); // casting it to a string 
    return new string(chars); // returning 
} 

Таким образом, вы можете максимально использовать консоль, и она будет работать более чем на 1,5 КБ.

+0

ОДНА проблема с этим кодом. Он включает в себя символы конца строки, поэтому он фактически нарушил мой код, пока я не поставил '.Trim()' –

+0

Ох, я вижу. CF/EF, да. Извините, я не обратил внимания на это, удачи в вашей программе (: @ acidzombie24 –

Смежные вопросы