c#ReadLine不读取整个文件

时间:2012-04-22 16:58:52

标签: c# readline

我使用此代码从我的文件中读取每一行但它只读取(或者它只显示文件的最后一行)。当我在记事本中打开文件时,我可以看到有多行。 这是我正在使用的代码:

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

                TextBox1.Text = input;  

            }

6 个答案:

答案 0 :(得分:6)

while循环的每次迭代都会将TextBox1.Text的前一个值替换为它已读取的行,因此当循环结束时,您只需使用文件中的最后一行更新Text propery。

考虑使用File.ReadAllText()代替逐行阅读。

TextBox1.Text = File.ReadAllText(newPath);

答案 1 :(得分:3)

TextBox1.Text = input

这会覆盖上一行。

答案 2 :(得分:3)

您需要使用:

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 { ... }

最好的方法是将阅读过程提取到一个单独的方法中。

答案 3 :(得分:1)

您的代码几乎是正确的,但行:

  TextBox1.Text = input;

用“输入”覆盖TextBox1,替换之前的内容。相反,您希望附加文本。所以,你想要:

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

这会将每一行“添加”到文本框中,并在每一行之间添加一个新行,以替换当您使用readLine()抓取一行时摆脱的那一行。

答案 4 :(得分:0)

如果你想分别使用每一行数据,你需要一个额外的字符串变量来分配每一行,因为对于你迭代的文件中的每一行,你都会覆盖“输入”,留下值最后一行。

答案 5 :(得分:0)

出于几个原因,我更喜欢使用stringbuilder。使用字符串构建器的主要优点是操作字符串的资源成本较低。

StringBuilder的用法如下:

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