본문 바로가기

개 발코딩

[c#] 파일 내의 특정 줄 읽어오기

파일 내의 특정 줄을 읽는 메소드가 제공되는지 찾아보았는데, MS에서는 특정 줄을 읽어오는 메소드는 제공되지 않는다. 

대신, FileStream.Seek 메소드를 통해 파일 포인터로 접근하는 것이 가능하지만, 한줄의 텍스트 길이가 일정하지 않는이상 특정줄을 찾아가는 것이 불가능하다.


고로 어쩔 수 없이 ReadLine 메소드를 여러번 루프를 돌려서 찾아가는 수 밖에 없다.


소스는 아래와 같다.


var fileLastStrList = new List<string>();

string path = string.Format(rawFilePath + "silo{0}.dat", siloNum); using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))  {      int lineNum = 1;      StreamReader reader = new StreamReader(fs);      

while ( !reader.EndOfStream )

{

if (lineNum == 5)  // 5번째 줄에 데이터 

    {         fileLastStrList.Add(reader.ReadLine());     }     else     {         reader.ReadLine();     }     lineNum++;

  }  reader.Close();  }


FileStream 객체로 파일을 읽어들인다. 이때 FileShare.ReadWrite 속성은 이 프로그램이 파일을 읽을 때, 다른 프로그램이 그 파일에 접근하여 읽고 쓸수 있도록 해주는 옵션이다. 이 옵션이 없을 시, 다른 프로그램이 파일을 읽고 있으면, 내가 만든 프로그램이 파일을 읽을 수도 없다.

여튼 StreamReader에 FileStream 객체를 넣준 후에 위의 소스와 같이 한줄씩 ReadLine 하고 5번째 줄만 List에 추가하였다.

그리고 마지막에 StreamReader를 Close 해준다.