c# ReadLine 不会读取整个文件
本文关键字:文件 读取 ReadLine | 更新日期: 2023-09-27 18:32:04
我使用此代码从文件中读取每一行,但它只读取(或仅显示文件的最后一行)。当我在记事本中打开文件时,我可以看到有不止一行。这是我正在使用的代码:
using (StreamReader sr = File.OpenText(newPath))
{
String input;
while ((input = sr.ReadLine()) != null)
{
TextBox1.Text = input;
}
while 循环的
每次迭代都会将 TextBox1.Text 的先前值替换为它已读取的行,因此当循环结束时,您只需使用文件中的最后一行更新 Text 属性。
考虑使用 File.ReadAllText() 代替逐行读取。
TextBox1.Text = File.ReadAllText(newPath);
您需要使用:
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 { ... }
最好的方法是将读取过程提取到单独的方法中。
TextBox1.Text = input
这将覆盖上一行。
你的代码几乎是正确的,但是行:
TextBox1.Text = input;
用"input"覆盖 TextBox1,替换之前的任何内容。相反,您希望附加文本。因此,您需要:
TextBox1.Text += input + "'n";
这会将每一行"添加"到文本框中,并在每行之间放置一个换行符,以替换使用 readLine() 抓取一行时删除的行。
如果你想单独使用每一行数据,你需要一个额外的字符串变量来分配每一行,因为对于你迭代的文件的每一行,你都会覆盖"input",让它留下最后一行的值。
出于几个原因,我更喜欢字符串生成器。使用字符串生成器的主要优点是操作字符串所需的资源成本较低。
StringBuilder 的用法如下所示:
StringBuilder builder = new StringBuilder();
using (StreamReader sr = File.OpenText(newPath)) {
while ((input = sr.ReadLine()) != null) {
builder.AppendLine(input);
}
}
TextBox1.Text = builder.ToString();