PHpullh

C# · 심층 가이드

C# 파일/IO 완전 정리

텍스트 파일 읽기와 쓰기부터 JSON 직렬화, CSV 파싱, 경로 조합, 디렉터리 순회, 설정 로드, 로그 회전까지 C# 파일 입출력 열다섯 가지를 정리했습니다.

주제 15개 · 예제 코드 포함 · 최종 수정 2026-08-30 · 작성 pullh 편집팀

.NET의 파일 API는 층이 나뉘어 있습니다. File.ReadAllText처럼 한 번에 끝내는 편의 메서드가 있고, 그 아래에 스트림과 리더가 있으며, 각각 비동기 짝을 갖습니다. 작은 설정 파일이라면 위층이 맞고, 수백 메가짜리 로그를 한 줄씩 훑는다면 통째로 읽는 순간 메모리에서 문제가 생깁니다. 어느 층을 쓸지는 파일 크기와 호출 빈도로 정합니다. 서버 코드라면 여기에 비동기 여부까지 더해지는데, 디스크 대기 동안 스레드를 붙잡고 있을 이유가 없기 때문입니다. 예제를 볼 때 이 세 축을 함께 보면 선택이 훨씬 단순해집니다.

텍스트 파일 읽기텍스트 파일 쓰기, 텍스트 파일 추가 쓰기가 기본 삼종 세트입니다. 여기에 구조를 얹은 것이 JSON 저장직렬화이고, 반대로 구조가 있는 척하지만 실은 규칙이 지저분한 쪽이 CSV 파싱입니다. 경로 합치기디렉터리 목록은 파일을 다루기 전에 위치를 정하는 단계라 앞쪽에 두고 읽어도 좋고, 설정 로드는 파일과 환경 변수 읽기를 합쳐 쓰는 실전형 예제입니다. 끝의 로그 파일 회전 흉내는 앞에서 익힌 쓰기, 존재 확인, 경로 조작을 한 번에 엮은 마무리에 해당합니다.

Path.Combine에는 잘 알려지지 않은 규칙이 있습니다. 뒤에 오는 인자가 루트로 시작하면 앞의 경로를 전부 버리고 그 절대 경로만 남깁니다. 사용자 입력으로 받은 하위 경로를 그대로 이어 붙이면 엉뚱한 위치에 쓰게 되는 원인입니다. CSV 파싱도 마찬가지로, 쉼표로 Split하는 코드는 따옴표로 감싼 필드 안에 쉼표나 줄바꿈이 들어오는 순간 깨집니다. 형식이 우리 손을 벗어나 있다면 검증된 파서를 쓰는 편이 낫습니다.

01텍스트 파일 읽기

C#에서 텍스트 파일 읽기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// 텍스트 파일 읽기
using System;
using System.IO;

File.WriteAllText("sample-1.txt", "hello");
Console.WriteLine(File.Exists("sample-1.txt"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

02텍스트 파일 쓰기

C#에서 텍스트 파일 쓰기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// 텍스트 파일 쓰기
using System;
using System.IO;

Console.WriteLine(Path.Combine("logs", "2026", "app-2.log"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

03텍스트 파일 추가 쓰기

C#에서 텍스트 파일 추가 쓰기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// 텍스트 파일 추가 쓰기
using System;
using System.IO;

File.WriteAllText("sample-3.txt", "hello");
Console.WriteLine(File.Exists("sample-3.txt"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

04JSON 저장

C#에서 JSON 저장 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// JSON 저장
using System;
using System.IO;

Console.WriteLine(Path.Combine("logs", "2026", "app-4.log"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

05CSV 파싱

C#에서 CSV 파싱 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// CSV 파싱
using System;
using System.IO;

File.WriteAllText("sample-5.txt", "hello");
Console.WriteLine(File.Exists("sample-5.txt"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

06환경 변수 읽기

C#에서 환경 변수 읽기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// 환경 변수 읽기
using System;
using System.IO;

Console.WriteLine(Path.Combine("logs", "2026", "app-6.log"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

07명령행 인자

C#에서 명령행 인자 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// 명령행 인자
using System;
using System.IO;

File.WriteAllText("sample-7.txt", "hello");
Console.WriteLine(File.Exists("sample-7.txt"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

08경로 합치기

C#에서 경로 합치기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// 경로 합치기
using System;
using System.IO;

Console.WriteLine(Path.Combine("logs", "2026", "app-8.log"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

09디렉터리 목록

C#에서 디렉터리 목록 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// 디렉터리 목록
using System;
using System.IO;

File.WriteAllText("sample-9.txt", "hello");
Console.WriteLine(File.Exists("sample-9.txt"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

10임시 파일

C#에서 임시 파일 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// 임시 파일
using System;
using System.IO;

Console.WriteLine(Path.Combine("logs", "2026", "app-10.log"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

11존재 여부 확인

C#에서 존재 여부 확인 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// 존재 여부 확인
using System;
using System.IO;

File.WriteAllText("sample-11.txt", "hello");
Console.WriteLine(File.Exists("sample-11.txt"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

12표준 입력 읽기

C#에서 표준 입력 읽기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// 표준 입력 읽기
using System;
using System.IO;

Console.WriteLine(Path.Combine("logs", "2026", "app-12.log"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

13설정 로드

C#에서 설정 로드 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// 설정 로드
using System;
using System.IO;

File.WriteAllText("sample-13.txt", "hello");
Console.WriteLine(File.Exists("sample-13.txt"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

14직렬화

C#에서 직렬화 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// 직렬화
using System;
using System.IO;

Console.WriteLine(Path.Combine("logs", "2026", "app-14.log"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

15로그 파일 회전 흉내

C#에서 로그 파일 회전 흉내 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.

C# code

// 로그 파일 회전 흉내
using System;
using System.IO;

File.WriteAllText("sample-15.txt", "hello");
Console.WriteLine(File.Exists("sample-15.txt"));
알아두면 좋은 점

파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.

자주 하는 실수

로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.

정리하며

  • 파일 크기와 호출 빈도로 편의 메서드와 스트림 중 어느 층을 쓸지 먼저 정합니다
  • Path.Combine은 뒤 인자가 루트로 시작하면 앞 경로를 통째로 버립니다
  • 쉼표 Split 기반 CSV 파싱은 따옴표 필드가 등장하는 순간 무너집니다
  • 설정은 파일과 환경 변수를 겹쳐 읽어 배포 환경마다 값을 갈아 끼울 수 있게 만듭니다

더 깊이 들어가고 싶다면 C# 학습 라이브러리에서 다른 주제 가이드를 이어서 보거나, 언어 비교에서 같은 개념이 다른 언어에서 어떻게 표현되는지 확인해 보세요.