기본 패턴
cpp
#include <fstream>
#include <sstream>
#include <string>
std::ifstream input("scores.txt");
std::string line;
while (std::getline(input, line)) {
std::stringstream ss(line);
std::string name;
int score{};
ss >> name >> score;
}설명
- C++의 stream 모델은 콘솔 입출력만이 아니라 파일, 문자열 버퍼, 메모리 버퍼까지 같은 인터페이스로 다루게 해 줍니다. 그래서
istream과ostream계열 개념을 한 번 이해하면 적용 범위가 넓어집니다. ifstream은 파일에서 읽을 때,ofstream은 파일에 쓸 때,fstream은 읽기와 쓰기를 함께 할 때 사용합니다. 즉 "대상"이 파일일 뿐 기본 조작 감각은cin,cout과 이어집니다.stringstream은 문자열을 stream처럼 다루는 도구입니다. 한 줄을 여러 필드로 파싱하거나, 여러 값을 포맷팅해 문자열을 만들 때 유용합니다.- 중요한 것은 "stream 상태"를 읽는 습관입니다. 파일이 열렸는지, 읽기가 성공했는지, 형식이 예상과 맞는지를 조건문과 함께 확인해야 안정적인 코드가 됩니다.
- 교재 관점에서는 file I/O와 parsing을 분리해 보는 감각이 중요합니다. 파일에서 한 줄을 읽고, 그 줄을 다시
stringstream으로 해석하면 구조가 훨씬 분명해집니다.
빠른 정리
| 타입 | 역할 |
|---|---|
std::ifstream | 파일 읽기 |
std::ofstream | 파일 쓰기 |
std::fstream | 파일 읽기/쓰기 |
std::stringstream | 문자열 파싱/조립 |
std::getline | 한 줄 읽기 |
주의할 점
stream이 열렸는지와 읽기가 성공했는지를 확인하지 않으면, 파일이 없거나 형식이 잘못됐을 때 조용히 빈 값만 남을 수 있습니다. file I/O는 항상 상태 확인과 함께 가는 편이 안전합니다.
참고 링크
2 sources