C# 파일 스트림 마스터하기: StreamReader & StreamWriter 단계별 가이드
C# 파일 I/O에서 스트림은 애플리케이션과 하부 파일 시스템 사이의 중개자 역할을 합니다. 특히 큰 데이터셋을 다룰 때 메모리 효율적인 방식으로 파일 읽기/쓰기를 가능하게 합니다.
100MB 파일을 통째로 메모리에 로드하면 앱이 멈출 수 있지만, 스트림은 데이터를 관리 가능한 청크로 분할합니다. 이 방식은 성능을 부드럽게 유지하고 크래시를 방지합니다.
아래에서 StreamReader와 StreamWriter를 사용한 파일 읽기/쓰기 간결 예제를 확인하세요. 단계별 지침을 따라 여러분 프로젝트에 이 패턴을 통합해 보세요.
StreamReader – 파일 읽기
StreamReader 클래스는 파일에서 텍스트를 한 줄씩 읽고, 애플리케이션이 처리하기 전에 버퍼를 통해 데이터를 전달합니다.
D 드라이브에 Example.txt 파일이 있고 다음 두 줄이 있다고 가정:
- Guru99 – .Net
- Guru99 – C#
콘솔 애플리케이션을 만들고 Program.cs에 다음 코드 추가:

using System;
using System.IO;
namespace DemoApplication {
class Tutorial {
static void Main(string[] args) {
string path = @"D:\Example.txt";
using (StreamReader sr = File.OpenText(path)) {
string line;
while ((line = sr.ReadLine()) != null) {
Console.WriteLine(line);
}
}
Console.ReadKey();
}
}
}
설명:
File.OpenText로 StreamReader 인스턴스화, 읽기 전용 모드로 파일 오픈
ReadLine()로 각 줄 읽기 – 파일에서 버퍼로, 버퍼에서 line 변수로 데이터 전송
- 각 줄을 콘솔에 출력
Visual Studio에서 실행 결과:

Example.txt의 두 줄이 올바르게 나타나 리더가 의도대로 작동함을 확인.
StreamWriter – 파일 쓰기
반대로 StreamWriter는 애플리케이션에서 파일로 텍스트를 버퍼를 통해 씁니다. 같은 Example.txt 파일에 줄을 추가하는 간단 예제:

using System;
using System.IO;
namespace DemoApplication {
class Tutorial {
static void Main(string[] args) {
string path = @"D:\Example.txt";
using (StreamWriter sw = File.AppendText(path)) {
sw.WriteLine("Guru99 – ASP.Net");
}
Console.WriteLine(File.ReadAllText(path));
Console.ReadKey();
}
}
}
설명:
File.AppendText로 StreamWriter 인스턴스화, 추가 모드로 파일 오픈
WriteLine()로 새 줄 쓰기 – 텍스트를 버퍼로 푸시한 후 파일로
using 블록으로 라이터 자동 닫기
File.ReadAllText로 전체 파일 내용 읽어 쓰기 작업 확인
프로그램 실행 결과:

콘솔에 세 줄 모두 표시되어 새 항목이 성공적으로 추가되었음 확인.
핵심 요약
- 스트림은 파일 I/O를 애플리케이션 로직에서 분리하여 큰 파일 효율적 처리 가능
StreamReader로 텍스트를 줄 단위 읽기
StreamWriter로 텍스트 쓰기/추가, 스트림 닫아 파일 핸들 해제 필수