C++ I/O 및 파일 조작 - 3. 파일 입출력 기본 (Basic File I/O)
2025. 3. 30. 00:35ㆍ프로그래밍 언어/C++
📘 3. 파일 입출력 기본 (Basic File I/O)
C++에서는 텍스트나 바이너리 파일을 다루기 위해 <fstream> 헤더를 사용합니다.
파일 입출력은 표준 입출력과 유사하게 스트림 기반으로 작동하며, 데이터를 영구 저장하거나 불러오는 데 적합합니다.
✅ <fstream> 헤더 소개
#include <fstream>
이 헤더는 파일 입출력을 위한 세 가지 주요 클래스를 제공합니다:
클래스 이름 | 설명 | 사용 목적 |
ifstream | 입력 파일 스트림 | 파일에서 읽기 |
ofstream | 출력 파일 스트림 | 파일에 쓰기 |
fstream | 입출력 모두 지원하는 파일 스트림 | 읽기 + 쓰기 가능 |
✅ 예제: 텍스트 파일 읽기
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::ifstream fin("data.txt");
std::string line;
if (!fin) {
std::cerr << "파일을 열 수 없습니다." << std::endl;
return 1;
}
while (std::getline(fin, line)) {
std::cout << line << std::endl;
}
fin.close();
return 0;
}
✅ 예제: 텍스트 파일 쓰기
#include <iostream>
#include <fstream>
int main() {
std::ofstream fout("output.txt");
if (!fout) {
std::cerr << "파일을 열 수 없습니다." << std::endl;
return 1;
}
fout << "Hello, file!" << std::endl;
fout << "이 내용이 파일에 저장됩니다." << std::endl;
fout.close();
return 0;
}
✅ 파일 열기 모드 (File Open Modes)
모드 | 설명 |
ios::in | 읽기 모드 (기본: ifstream) |
ios::out | 쓰기 모드 (기본: ofstream) |
ios::app | 파일 끝에 내용을 추가 (append) |
ios::binary | 바이너리 모드 (텍스트가 아닌 데이터) |
ios::trunc | 열 때 기존 내용 삭제 (기본: ofstream) |
ios::ate | 파일을 열자마자 파일 끝으로 이동 |
std::ofstream fout("log.txt", std::ios::app);
std::fstream file("data.txt", std::ios::in | std::ios::out);
✅ 텍스트 모드 vs 바이너리 모드
C++ 파일 입출력은 기본적으로 텍스트 모드에서 작동합니다. 하지만 바이너리 데이터를 다룰 때는 ios::binary 모드를 명시해야 합니다.
구분 | 텍스트 모드 | 바이너리 모드 |
데이터 처리 | 사람이 읽을 수 있는 형식 | 그대로의 이진 데이터 |
개행 문자 변환 | OS에 따라 자동 변환됨 (예: \n → \r\n) | 변환 없이 그대로 저장됨 |
용도 | 로그, 설정파일 등 | 이미지, 오디오, 구조체 등 이진 파일 |
✅ 운영체제별 개행 문자 처리
운영체제에 따라 개행 문자 처리 방식이 다릅니다. C++의 텍스트 모드는 이를 자동으로 처리해 줍니다.
운영체제 | 개행 문자 | 설명 |
Windows | \r\n (CR+LF) | 캐리지 리턴 + 라인 피드 |
Unix/Linux/macOS | \n (LF) | 라인 피드 |
📌 주의사항: 바이너리 모드에서는 개행 문자 자동 변환이 일어나지 않으므로, 텍스트 파일을 바이너리로 잘못 저장하거나 읽으면 데이터 해석이 깨질 수 있습니다.
✅ fstream을 활용한 읽기 + 쓰기 예제
fstream 클래스는 하나의 스트림 객체로 파일을 읽기와 쓰기 모두 처리할 수 있게 해줍니다.
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::fstream file("example.txt", std::ios::in | std::ios::out | std::ios::trunc);
if (!file) {
std::cerr << "파일 열기에 실패했습니다." << std::endl;
return 1;
}
// 파일에 쓰기
file << "C++ 파일 입출력 테스트입니다." << std::endl;
// 파일 읽기를 위해 위치 재조정
file.seekg(0); // 파일 처음으로 이동
std::string line;
std::getline(file, line);
std::cout << "읽은 내용: " << line << std::endl;
file.close();
return 0;
}
📌 설명
- std::ios::trunc: 기존 내용을 지우고 새로 작성
- seekg(0): 읽기 위치를 파일의 처음으로 이동
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ I/O 및 파일 조작 - 5. 바이너리 파일 입출력 (Binary File I/O) (0) | 2025.03.30 |
---|---|
C++ I/O 및 파일 조작 - 4. 파일 조작 (File Manipulation) (0) | 2025.03.30 |
C++ I/O 및 파일 조작 - 2. 표준 입출력 (Standard Input/Output) (0) | 2025.03.30 |
C++ I/O 및 파일 조작 - 1. 개요 (Introduction) (0) | 2025.03.30 |
C++의 링크 유형 (Linkage) - 10. 요약 및 결론 (0) | 2025.03.27 |