[C++] 파일 입출력

Date:     Updated:

카테고리:

태그:

이 글은 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);
    


참조

포큐아카데미 C++ 언매니지드 프로그래밍



💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우 
  언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기