c# ReadLine не читает весь файл

Я использую этот код для чтения каждой строки из моего файла, но он только читает (или отображает только последнюю строку файла). Когда я открываю файл в блокноте, я вижу, что в нем больше одной строки. Вот код, который я использую:

 using (StreamReader sr = File.OpenText(newPath))
        {
            String input;
            while ((input = sr.ReadLine()) != null)
            {

                TextBox1.Text = input;  

            }

person Silvia Stoyanova    schedule 22.04.2012    source источник
comment
Попробуйте позвонить File.ReadAllText.   -  person SLaks    schedule 22.04.2012
comment
Не было причин минусовать это. Это законный вопрос, который показывает, что человек делает свою работу и пытается решить самостоятельно.   -  person Jeremy    schedule 22.04.2012


Ответы (6)


Вам нужно использовать:

TextBox1.Text += input;

иначе описанное поведение правильно

в конце концов вы можете изменить свой образец как:

String input;
String target = String.Empty;
try {
using (StreamReader sr = File.OpenText(newPath)) 
{ 
    while ((input = sr.ReadLine()) != null) 
    { 
        target += input;   
    }
}
TextBox1.Text = target;
} catch { ... }

и лучше всего было бы выделить процесс чтения в отдельный метод..

person rudolf_franek    schedule 22.04.2012

Каждая итерация вашего цикла while заменяет предыдущее значение TextBox1.Text прочитанной строкой, поэтому, когда цикл заканчивается, вы просто обновляете свойство Text последней строкой в ​​файле.

Рассмотрите возможность использования File.ReadAllText() вместо построчного чтения.

TextBox1.Text = File.ReadAllText(newPath);
person roken    schedule 22.04.2012
comment
Это путь. Не нужно разбивать текст на несколько строк, а затем снова собирать все строки в один бит текста. - person Jeremy; 22.04.2012

TextBox1.Text = input

Это перезаписывает предыдущую строку.

person SLaks    schedule 22.04.2012

Ваш код почти правильный, но строка:

  TextBox1.Text = input;

Заменяет TextBox1 на «ввод», заменяя все, что было в нем ранее. Вместо этого вы хотите добавить свой текст. Итак, вы хотите:

TextBox1.Text += input + "\n";

Это «добавит» каждую строку в текстовое поле и поместит новую строку между каждой, чтобы заменить ту, от которой вы избавились, когда захватили строку с помощью readLine().

person Jeremy    schedule 22.04.2012

Если вы хотите использовать каждую строку данных отдельно, вам нужна дополнительная строковая переменная для назначения каждой строки, потому что для каждой строки в файле, который вы перебираете, вы перезаписываете «ввод», оставляя его со значением последнего линия.

person user997112    schedule 22.04.2012
comment
я сделал это так, и теперь он работает string CR = Environment.NewLine; TextBox1.Text += ввод + CR; - person Silvia Stoyanova; 22.04.2012

Я бы предпочел stringbuilder по нескольким причинам. Основное преимущество использования построителя строк заключается в том, что для манипулирования строками требуется меньше ресурсов.

Использование StringBuilder выглядит так:

 StringBuilder builder = new StringBuilder();
 using (StreamReader sr = File.OpenText(newPath)) {
     while ((input = sr.ReadLine()) != null) {
         builder.AppendLine(input);
     }
 }
 TextBox1.Text = builder.ToString();
person Tomtom    schedule 22.04.2012