2017-04-25 3 views
1

100 회 실행되는 for 루프를 사용하여 텍스트 파일을 읽으려고합니다. 텍스트 파일이 100 선이 아닌 경우는 (700) 그래서 내가 루프가 100 번 실행되지만 각 run.How에서 파일의 "1 %"읽고 싶은 말을 할 수 있다면for 루프를 사용하여 전체 텍스트 파일 읽기

StreamReader reader = new StreamReader("client.txt");  
for (int i=0;i<=100;i++) 
{ 
    reader.readline(); 
} 

지금이 잘 작동 것 내가 그랬어?

+0

전체 파일을 메모리로 읽어 들인 다음 거기에서 조작하는 이유가 있습니까? – maccettura

+0

https://msdn.microsoft.com/en-us/library/94223t4d.aspx 그러나 File.ReadAllLines 훨씬 좋네요. –

+0

진행률 표시 줄에 "파일 읽기"진행 상태가 표시됩니다. 그래서 for 루프에서 100 번 실행해야합니다. 전체 파일을 읽지 않는 이유는 무엇입니까? –

답변

3

파일 크기가 너무 크지 않으면 다음을 수행 할 수 있습니다

string[] lines = File.ReadAllLines("client.txt"); 

또는 한 번에 1 % 읽기

string text = File.ReadAllText("client.txt"); 

나는 독서 라인의 접근 방식으로 갈 것, 조금 까다 롭습니다 선으로 :

var filename = "client.txt"; 
var info = new FileInfo(filename); 
var text = new StringBuilder(); 

using (var stream = new FileStream(filename, FileMode.Open)) 
using (var reader = new StreamReader(stream)) 
{ 
    while (!reader.EndOfStream) 
    { 
     text.AppendLine(reader.ReadLine()); 
     var progress = Convert.ToDouble(stream.Position) * 100/info.Length; 
     Console.WriteLine(progress); 
    } 
} 

var result = text.ToString(); 

그러나주의하시기 바랍니다은 진행이 매우 정확하지 않을 때문에 StreamReader.ReadLine (와 동등하게 ReadLineAsync)는 종종 단일 행 이상을 읽습니다. 기본적으로 버퍼를 읽고 버퍼를 해석합니다. 한 번에 한 바이트 씩 읽는 것보다 훨씬 효율적이지만 스트림이 엄밀히 말하면 필요한 것보다 더 멀리 나아갈 것입니다.

+0

많은 많은 감사, 나는 이런 식으로 작동하게 만들 수있었습니다. –

+0

@chris 당신은 환영합니다 :) – Andrei