2012-04-22 2 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

각 데이터 행을 사용하려면 ately 당신은 당신이 반복하는 파일의 모든 라인에 대해 "입력"을 덮어 쓰고 마지막 라인의 값을 남기므로 각 라인을 지정하기 위해 여분의 문자열 변수가 필요합니다.

+0

나는 이것을 좋아하고 지금 일하고있다 string CR = Environment.NewLine; TextBox1.Text + = input + CR; –

1

코드는 거의 정확하지만 라인은 :

TextBox1.Text = input; 

는 이전에 있었다 어떤 대체 "입력"으로 TextBox1에 덮어 쓴다. 대신 텍스트를 추가하려고합니다. 그래서, 당신이 원하는 :

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

이 텍스트 상자의 각 줄에 "추가", 그리고 (당신이 작성한 Readline 사용하여 라인을 잡고 때를 제거당한를 대체하기 위해 각각의 사이에 새로운 라인을 넣어 것입니다).

7

while 루프를 반복 할 때마다 TextBox1.Text의 이전 값이 읽은 행으로 바뀌므로 루프가 끝나면 텍스트 특성을 파일의 마지막 행으로 간단히 업데이트했습니다.

줄 단위 읽기 대신 File.ReadAllText()을 사용하는 것이 좋습니다.

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

이것은 갈 길입니다. 텍스트를 여러 줄로 나눌 필요가 없으며 모든 줄을 한 줄의 텍스트로 다시 묶을 필요가 없습니다. – Jeremy

0

몇 가지 이유에서 나는 stringbuilder를 선호합니다. 문자열 작성기를 사용할 때의 주요 이점은 문자열을 조작하는 데 필요한 자원이 적게 듭니다.

StringBuilder builder = new StringBuilder(); 
using (StreamReader sr = File.OpenText(newPath)) { 
    while ((input = sr.ReadLine()) != null) { 
     builder.AppendLine(input); 
    } 
} 
TextBox1.Text = builder.ToString(); 
관련 문제