본문 바로가기

C#

C# StreamReader와 StreamWriter의 고급 활용

StreamReader와 StreamWriter는 파일 입출력에서 자주 사용하는 클래스입니다. 기본적인 사용법 외에, 다양한 옵션과 고급 기능을 활용하면 더 효과적인 파일 처리 프로그램을 작성할 수 있습니다.

1. StreamReader의 고급 활용

StreamReader는 텍스트 파일을 읽을 때 사용합니다. 기본 생성자 외에, 인코딩 지정, 버퍼 크기 조절, 비동기 읽기 등을 활용할 수 있습니다.

using System.IO;
using System.Text;

string path = "example.txt";

// 인코딩과 버퍼 크기 지정
using(var reader = new StreamReader(path, Encoding.UTF8, detectEncodingFromByteOrderMarks: true, bufferSize: 4096))
{
    string line;
    while((line = reader.ReadLine()) != null)
    {
        // 처리 로직
        Console.WriteLine(line);
    }
}

// 비동기 읽기 예제
async Task ReadFileAsync(string filePath)
{
    using var reader = new StreamReader(filePath);
    string content = await reader.ReadToEndAsync();
    Console.WriteLine(content);
}

2. StreamWriter의 고급 활용

StreamWriter는 텍스트 파일에 쓰기 위해 사용합니다. 생성자에서 인코딩과 append 옵션을 조정하고, AutoFlush 기능으로 성능을 조절할 수 있습니다.

string outputPath = "output.txt";

// 기존 파일에 내용 추가 (append 옵션 true)
using(var writer = new StreamWriter(outputPath, append: true, encoding: Encoding.UTF8))
{
    writer.WriteLine("새로운 내용 추가합니다.");
    writer.Flush();  // 버퍼 강제 비우기
}

// AutoFlush 사용 예제
using(var writer = new StreamWriter(outputPath))
{
    writer.AutoFlush = true;  // 매 번 쓰기 후 자동으로 버퍼를 비웁니다
    writer.WriteLine("즉시 파일에 기록됩니다.");
}

3. 유용한 팁

  • using 구문을 활용해 리소스 누수를 방지합니다.
  • 인코딩을 명확히 지정해 다양한 환경에서 호환성을 보장합니다.
  • 비동기 메서드를 사용해 UI 쓰레드 차단을 피합니다.
  • 버퍼 크기를 조절하면 큰 파일 읽기/쓰기 성능 향상이 가능합니다.

이처럼 StreamReader와 StreamWriter의 고급 기능을 적절히 활용하면 안정적이고 효율적인 파일 입출력 프로그램을 작성할 수 있습니다.