2012-04-22 89 views
2

我使用此代碼從我的文件中讀取每一行,但它只能讀取(或只顯示文件的最後一行)。當我在記事本中打開文件時,我可以看到有多行。 下面是我使用的代碼:c#ReadLine不讀取整個文件

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

       TextBox1.Text = input; 

      } 
+5

考慮調用'File.ReadAllText'。 – SLaks 2012-04-22 17:00:34

+3

有沒有理由downvote這一點。這是一個合理的問題,表明這個人正在做他自己的工作,並試圖自己解決。 – Jeremy 2012-04-22 17:04:15

回答

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

TextBox1.Text = input

它重寫了前行。

0

如果你想使用每行數據separ只需要一個額外的字符串變量來分配每一行,因爲對於遍歷的文件中的每一行,都會覆蓋「輸入」,並將其保留爲最後一行的值。

+0

我這樣做,它現在正在工作字符串CR = Environment.NewLine; TextBox1.Text + = input + CR; – 2012-04-22 17:09:47

1

你的代碼幾乎是正確的,但行:

TextBox1.Text = input; 

改寫TextBox1中以「輸入」,取代任何在它之前。你正在尋找追加你的文字。所以,你想:

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

這會「增加」的每一行文本框,並提出了新的行中的每一個之間,以取代你擺脫了,當你抓住使用的readLine行的一個( )。

7

while循環的每次迭代都會用它所讀取的行替換TextBox1.Text的前一個值,因此當循環結束時,您只需使用文件中的最後一行更新Text propery。

考慮使用File.ReadAllText()來代替逐行讀取。

TextBox1.Text = File.ReadAllText(newPath); 
+2

這是要走的路。不需要將文本分解爲多行,然後再將所有行重新組合到一行文本中。 – Jeremy 2012-04-22 17:04:51

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