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;  
            }

c# ReadLine 不会读取整个文件

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();