我使用此代码从我的文件中读取每一行但它只读取(或者它只显示文件的最后一行)。当我在记事本中打开文件时,我可以看到有多行。 这是我正在使用的代码:
using (StreamReader sr = File.OpenText(newPath))
{
String input;
while ((input = sr.ReadLine()) != null)
{
TextBox1.Text = input;
}
答案 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();