3

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

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

                TextBox1.Text = input;  

            }
4

6 回答 6

6

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

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

TextBox1.Text = File.ReadAllText(newPath);
于 2012-04-22T17:04:17.563 回答
4

你需要使用:

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

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

于 2012-04-22T17:00:27.137 回答
3

TextBox1.Text = input

这会覆盖上一行。

于 2012-04-22T17:00:25.093 回答
1

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

  TextBox1.Text = input;

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

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

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

于 2012-04-22T17:02:07.233 回答
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();
于 2012-04-22T17:44:43.703 回答
0

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

于 2012-04-22T17:01:36.310 回答