[C++] 파일 입출력
카테고리: Cpp
태그: IO
이 글은 C++ 파일 입출력을 공부하고 정리한 글입니다
코드 예시
// 읽기 전용으로 파일을 오픈
ifstream fin;
fin.open("data.txt");
// 쓰기 전용으로 파일을 오픈(파일이 없으면 만듦)
ofstream fout;
fout.open("data.txt");
// 읽기와 쓰기 범용으로 파일을 오픈
fstream fs;
fs.open("data.txt");
파일 입출력 <fstream>
ifstream
: 파일 입력ofstream
: 파일 출력fstream
: 파일 입력 및 출력
open()
- 각 스트림마다 open() 메서드가 있음
fin.open("data.txt", ios_base::in | ios_base::binary);
모드 플래그(mode flags)
- 네임스페이스 : ios_base
- 모든 조합이 유효하지는 않음
- in : 입력
- out : 출력
- ate : 파일 포인터를 제일 마지막까지 옮겨라
- app : 덧붙이기
- trunc : 파일 열고 내용을 다 버린다
- binary : 이진파일로 연다
- C랑 비교
- “r” : ios_base::in
- “w” : ios_base::out , ios_base::out | ios_base::trunc
- “a” : ios_base::out | ios_base::app
- “r+” : ios_base::in | ios_base::out
- “w+” : ios_base::in | ios_base::out | ios_base::trunc
close()
- 각 스트림마다 close() 메서드가 있음
fin.close();
is_open()
- 파일이 열려 있는지 확인
if (fs.is_open()) { } // 열려 있음
put(), «
- 문자를 써 넣음
fout.put(character); fout << line << enld;
read()
- read(char*, streamsize)
// 파일로부터 문자 20자를 잃어 data에 저장 fin.read(&data, 20);
write()
- write(const char*, streamsize)
// data에 저장 되어있는 문자 20자를 파일에 씀 fout.write(data, 20);
탐색(seek) 유형
- 절대적
- 예) 특정한 위치로 감
- 보통 tellp()/tellg()를 사용해서 기억해 놨던 위치로 돌아갈 때 사용
- 상대적
- 예) 파일의 끝에서부터 5바이트 앞의 위치로 이동
- 탐색 방향 유형
ios_base::beg
: 스트림의 시작ios_base::cur
: 현재 스트림의 위치ios_base::end
: 스트림의 끝
tellp()
- 쓰기 포인터의 위치를 구함
ios::pos_type pos = fout.tellp();
seekp()
- 절대적
fout.seekp(0); // 처음 위치로 이동
- 상대적
// 현재 위치로 부터 20 바이트 뒤로 이동 fout.seekp(20, ios_base::cur);
tellg()
- 읽기 포인터의 위치를 구함
ios::pos_type pos = fout.tellg();
seekg()
- 절대적
fin.seekg(0); // 처음 위치로 이동
- 상대적
// 파일의 끝에서부터 10 바이트 앞으로 이동 fin.seekg(-10, ios_base::end);
std::ws
- 선행공백을 없애줌
cin >> number; cin >> std::ws; getline(cin, line);
참조
💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸
댓글 남기기