2012-04-22 15 views
2

私はこのコードを使用してファイルからすべての行を読み込みますが、読み取るだけです(またはファイルの最後の行のみを表示します)。メモ帳でファイルを開くと、複数の行があることがわかります。c#ReadLineはファイル全体を読み取っていません

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

       TextBox1.Text = input; 

      } 
+5

は 'File.ReadAllText'を呼び出して考えてみましょう:

のStringBuilderの使い方は次のようになります。 – SLaks

+3

これをdownvoteする理由はありませんでした。その人が自分の仕事をしていて、自分で解決しようとしていることを示す正当な質問です。 – Jeremy

答えて

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

各データ行を使いたい場合あなたが繰り返し処理するファイルのすべての行について、最後の行の値を残して "input"を上書きしているので、各行を割り当てる余分な文字列変数が必要です。

+0

私はこれを好きでしたし、現在は文字列CR = Environment.NewLine; TextBox1.Text + = input + CR; –

1

あなたのコードはほとんど正しいですが、ライン:

TextBox1.Text = input; 

は以前にそれにあったものは何でも置き換え、「入力」でのTextBox1を上書きします。代わりにあなたのテキストを追加しようとしています。だから、あなたがしたい:

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

このテキストボックスに各行を「追加」、および(あなたがのreadLineを使用して線をつかんだ時に処分したものを置き換えるために、各1の間に改行を入れます)。

7

whileループの各繰り返しは、TextBox1.Textの以前の値を読み込んだ行に置き換えます。したがって、ループが終了したら、ファイルの最後の行でTextプロパティを更新しただけです。

行単位の読み取りの代わりにFile.ReadAllText()を使用することを検討してください。

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

これは行く方法です。テキストを複数の行に分割し、すべての行をまとめて1ビットのテキストにまとめる必要はありません。 – Jeremy

0

いくつかの理由から、私はストリングビルダを好むでしょう。文字列作成ツールを使用する主な利点は、文字列を操作するためのリソースが少なくて済むことです。

StringBuilder builder = new StringBuilder(); 
using (StreamReader sr = File.OpenText(newPath)) { 
    while ((input = sr.ReadLine()) != null) { 
     builder.AppendLine(input); 
    } 
} 
TextBox1.Text = builder.ToString(); 
関連する問題