C++ 텍스트 파일 쓰기

ofstream 상태 확인

텍스트 파일 쓰기는 문자열을 내보내는 일이지만, 실제 버그는 열기 모드, 인코딩, flush, 실패 상태를 놓칠 때 생긴다. append와 truncate, newline 정책, close 시점까지 계약으로 둔다.

01

경로 결정

상대 경로 기준과 디렉터리 존재 여부를 먼저 확인한다.

작업 디렉터리 한계
02

모드 선택

기본은 덮어쓰기이며 누적 로그는 ios::app을 명시한다.

truncate/app 구분
03

출력

operator<<, write, format 결과를 사용하되 줄바꿈과 locale 영향을 확인한다.

텍스트 계약
04

상태 검사

쓰기 후 fail이나 bad 상태를 확인하고 close 시점 오류도 고려한다.

디스크 full 가능
truncate
기존 내용 삭제 후 기록 설정 파일 저장처럼 전체 내용을 새로 쓰는 경우에 적합하다.
백업 고려
append
파일 끝에 추가 로그 파일처럼 기존 기록을 유지해야 할 때 쓴다.
중복 기록 한계
flush
버퍼를 OS로 밀어냄 endl은 줄바꿈과 flush를 함께 하므로 잦은 사용은 비용이 된다.
'\n'과 구분
error
open 성공만으로 충분하지 않음 쓰기 중 권한, 용량, 장치 오류가 뒤늦게 드러날 수 있다.
상태 재확인

모드 · 예외 · 원자성 점검

모드 덮어쓰기와 이어쓰기 의도가 코드에 명확히 드러나는지 본다.
예외 exceptions()를 켰다면 처리 범위와 복구 전략이 있는지 확인한다.
원자성 중요 파일은 임시 파일에 쓰고 rename하는 방식이 필요한지 검토한다.

쓰기 상태 확인

std::ofstream out(path, std::ios::app);
if (!out) throw std::runtime_error("open failed");
out << line << '\n';
if (!out) throw std::runtime_error("write failed");