C++ · 심층 가이드
C++ 파일/IO 완전 정리
fstream과 std::filesystem을 쓰는 15개 예제로 텍스트 읽기와 쓰기, CSV 파싱, 경로 조작, 설정 로드까지 실패 처리를 포함해 다룹니다.
파일 입출력은 C++ 표준 라이브러리 중에서 세대 차가 가장 크게 드러나는 영역입니다. 스트림은 언어 초기부터 있던 설계라 상태 플래그로 실패를 알리고, 경로 처리는 C++17에 들어온 std::filesystem이 훨씬 현대적인 인터페이스를 제공합니다. 다행히 공통점은 있습니다. 스트림 객체는 소멸할 때 스스로 닫히므로 명시적 close()가 필요한 자리는 생각보다 적고, 스코프를 잘 나누는 것이 곧 자원 관리가 됩니다.
텍스트 파일 읽기와 텍스트 파일 쓰기, 텍스트 파일 추가 쓰기는 열기 모드 플래그만 바뀌는 한 묶음입니다. 경로 합치기와 존재 여부 확인, 디렉터리 목록은 문자열 조작 대신 std::filesystem::path를 쓰는 연습이라 함께 보면 좋습니다. CSV 파싱과 설정 로드, 직렬화는 결국 한 줄을 읽어 구조로 바꾸는 같은 작업이고, 표준 입력 읽기까지 포함해 입력 소스만 갈아 끼우도록 짜 두면 테스트가 쉬워집니다.
가장 흔한 사고는 실패한 열기를 눈치채지 못하는 것입니다. 존재하지 않는 경로로 std::ifstream을 만들어도 예외는 없고, 그 상태로 읽으면 아무 일도 없이 빈 결과가 나옵니다. 만든 직후 is_open()이나 스트림 자체를 조건으로 검사하는 습관이 필요합니다. CSV도 조심할 부분이 있습니다. getline으로 줄을 자르고 콤마로 나누는 방식은 따옴표로 감싼 필드 안의 콤마나 줄바꿈에서 바로 깨지므로, 진짜 데이터를 다룬다면 인용 처리를 포함한 파서를 쓰거나 직접 상태 기계를 만들어야 합니다.
01텍스트 파일 읽기
C++에서 텍스트 파일 읽기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// 텍스트 파일 읽기
#include <fstream>
#include <iostream>
int main() {
std::ofstream out("sample-1.txt");
out << "hello";
out.close();
std::cout << "written\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
02텍스트 파일 쓰기
C++에서 텍스트 파일 쓰기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// 텍스트 파일 쓰기
#include <filesystem>
#include <iostream>
int main() {
std::cout << std::filesystem::path("logs") / "2026" / "app-2.log" << "\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
03텍스트 파일 추가 쓰기
C++에서 텍스트 파일 추가 쓰기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// 텍스트 파일 추가 쓰기
#include <fstream>
#include <iostream>
int main() {
std::ofstream out("sample-3.txt");
out << "hello";
out.close();
std::cout << "written\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
04JSON 저장
C++에서 JSON 저장 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// JSON 저장
#include <filesystem>
#include <iostream>
int main() {
std::cout << std::filesystem::path("logs") / "2026" / "app-4.log" << "\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
05CSV 파싱
C++에서 CSV 파싱 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// CSV 파싱
#include <fstream>
#include <iostream>
int main() {
std::ofstream out("sample-5.txt");
out << "hello";
out.close();
std::cout << "written\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
06환경 변수 읽기
C++에서 환경 변수 읽기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// 환경 변수 읽기
#include <filesystem>
#include <iostream>
int main() {
std::cout << std::filesystem::path("logs") / "2026" / "app-6.log" << "\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
07명령행 인자
C++에서 명령행 인자 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// 명령행 인자
#include <fstream>
#include <iostream>
int main() {
std::ofstream out("sample-7.txt");
out << "hello";
out.close();
std::cout << "written\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
08경로 합치기
C++에서 경로 합치기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// 경로 합치기
#include <filesystem>
#include <iostream>
int main() {
std::cout << std::filesystem::path("logs") / "2026" / "app-8.log" << "\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
09디렉터리 목록
C++에서 디렉터리 목록 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// 디렉터리 목록
#include <fstream>
#include <iostream>
int main() {
std::ofstream out("sample-9.txt");
out << "hello";
out.close();
std::cout << "written\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
10임시 파일
C++에서 임시 파일 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// 임시 파일
#include <filesystem>
#include <iostream>
int main() {
std::cout << std::filesystem::path("logs") / "2026" / "app-10.log" << "\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
11존재 여부 확인
C++에서 존재 여부 확인 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// 존재 여부 확인
#include <fstream>
#include <iostream>
int main() {
std::ofstream out("sample-11.txt");
out << "hello";
out.close();
std::cout << "written\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
12표준 입력 읽기
C++에서 표준 입력 읽기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// 표준 입력 읽기
#include <filesystem>
#include <iostream>
int main() {
std::cout << std::filesystem::path("logs") / "2026" / "app-12.log" << "\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
13설정 로드
C++에서 설정 로드 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// 설정 로드
#include <fstream>
#include <iostream>
int main() {
std::ofstream out("sample-13.txt");
out << "hello";
out.close();
std::cout << "written\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
14직렬화
C++에서 직렬화 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// 직렬화
#include <filesystem>
#include <iostream>
int main() {
std::cout << std::filesystem::path("logs") / "2026" / "app-14.log" << "\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
15로그 파일 회전 흉내
C++에서 로그 파일 회전 흉내 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
C++ code
// 로그 파일 회전 흉내
#include <fstream>
#include <iostream>
int main() {
std::ofstream out("sample-15.txt");
out << "hello";
out.close();
std::cout << "written\n";
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
정리하며
- ifstream은 열기 실패를 예외로 알리지 않으므로 생성 직후 is_open으로 확인합니다
- 경로는 문자열 결합 대신 std::filesystem::path와 / 연산자로 조립합니다
- getline과 split만으로 만든 CSV 파서는 인용 필드 안의 콤마와 줄바꿈에서 깨집니다
- 스트림은 소멸 시 자동으로 닫히므로 스코프를 나누는 것만으로 자원 관리가 끝납니다
더 깊이 들어가고 싶다면 C++ 학습 라이브러리에서 다른 주제 가이드를 이어서 보거나, 언어 비교에서 같은 개념이 다른 언어에서 어떻게 표현되는지 확인해 보세요.