Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 StreamReader를 활용한 텍스트 파일 읽기 방법

C#에서 텍스트 파일을 읽을 때는 StreamReader 클래스를 사용하는 것이 가장 일반적이고 효율적인 방법입니다. StreamReader는 System.IO 네임스페이스에 포함되어 있으며, 문자 인코딩을 자동으로 처리하면서 파일 내용을 한 줄씩 또는 전체로 손쉽게 읽어올 수 있습니다.

1. StreamReader 객체 생성하기

먼저 읽고자 하는 파일의 이름(경로)을 지정하여 StreamReader 객체를 생성합니다.

StreamReader sr = new StreamReader("hello.txt");

위 코드처럼 생성자에 파일 경로를 전달하면 해당 파일을 열어 읽을 준비가 완료됩니다. 만약 파일이 존재하지 않으면 FileNotFoundException이 발생하므로, 실제 프로젝트에서는 예외 처리를 함께 고려하는 것이 좋습니다.

2. ReadLine() 메서드로 파일 내용 읽기

ReadLine() 메서드를 사용하면 파일의 내용을 한 줄씩 문자열(string) 형태로 가져올 수 있습니다. 다음과 같이 using 블록을 활용하면 파일 사용이 끝난 후 리소스가 자동으로 해제되므로 안전합니다.

using (StreamReader sr = new StreamReader("hello.txt")) {
    str = sr.ReadLine();
}
Console.WriteLine(str);

using 문은 IDisposable 인터페이스를 구현한 객체가 블록을 벗어날 때 자동으로 Dispose()를 호출해 주기 때문에, 파일 핸들이 제대로 닫히지 않아 발생할 수 있는 리소스 누수를 방지할 수 있습니다.

3. 전체 예제 코드

파일 쓰기부터 읽기까지의 전체 과정을 담은 예제를 살펴보겠습니다.

using System.IO;
using System;

public class Program {
    public static void Main() {
        string str;
        
        // StreamWriter로 파일 생성 및 텍스트 작성
        using (StreamWriter sw = new StreamWriter("hello.txt")) {
            sw.WriteLine("Hello");
            sw.WriteLine("World");
        }
        
        // StreamReader로 파일의 첫 번째 줄 읽기
        using (StreamReader sr = new StreamReader("hello.txt")) {
            str = sr.ReadLine();
        }
        
        Console.WriteLine(str);
    }
}

코드 설명

이 예제는 두 단계로 동작합니다.

첫 번째 단계: StreamWriter를 사용해 "hello.txt" 파일을 생성하고 "Hello"와 "World"라는 두 줄의 텍스트를 작성합니다.

두 번째 단계: StreamReader를 사용해 동일한 파일을 다시 열고, ReadLine() 메서드로 첫 번째 줄인 "Hello"를 읽어옵니다. 이후 Console.WriteLine()을 통해 화면에 출력합니다.

실행 결과

프로그램을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

Hello

추가 팁: 파일 전체 내용 읽기

첫 번째 줄이 아닌 파일의 모든 내용을 한 번에 읽고 싶다면 ReadToEnd() 메서드를 사용할 수 있습니다.

using (StreamReader sr = new StreamReader("hello.txt")) {
    string allText = sr.ReadToEnd();
    Console.WriteLine(allText); // Hello\nWorld 출력
}

또는 여러 줄을 반복해서 읽으려면 ReadLine()이 null을 반환할 때까지 while 루프를 돌리는 방식이 유용합니다.

string line;
while ((line = sr.ReadLine()) != null) {
    Console.WriteLine(line);
}

이처럼 C#의 StreamReader 클래스는 텍스트 파일을 다룰 때 간결하고 직관적인 API를 제공하므로, 로그 분석, 설정 파일 파싱 등 다양한 상황에서 폭넓게 활용할 수 있습니다.