Nagie's DevStory

[CPP] 41. 파일 입출력 (File I/O) [ 3 ] 본문

Programming/C++

[CPP] 41. 파일 입출력 (File I/O) [ 3 ]

Nagie 2023. 10. 23. 23:10
728x90

C의 파일 입출력처럼 C++ 역시 파일 모드란게 존재하며
표준 C++에서 지원하는 파일 모드는 아래의 표와 같다.
 

파일 모드설명
std::ios::in
파일을 읽기 위해 사용되며 

파일을 읽을 수 있지만 쓸 수는 없다.

std::ios::out
파일을 쓰기 위해 사용되며

파일을 쓸 수 있지만 읽을 수는 없다.

std::ios::app
파일 끝에 데이터를 추가하기 위해 사용된다.

기존 파일의 끝에 데이터를 추가할 수 있다.

std::ios::binary
이진 파일 모드로 사용된다.

파일을 이진 모드로 열 때 사용되며 파일의 데이터를 이진 파일로 처리한다.

std::ios::ate
파일을 열 때 파일 끝에 커서를 위치시키는 데 사용된다

파일을 열면 파일 끝에서 시작하며 파일을 읽고 쓸 수 있다.

std::ios::trunc
파일을 열 때 파일이 이미 존재하면 해당 파일의 내용을 삭제하고

새로운 파일로 열기 위해 사용된다.

이 모드를 사용하면 파일을 덮어쓴다.

 
각 모드는 '|'를 사용해 결합이 가능하며 다음과 같이 사용이 가능하다.
 

#include <fstream>
#include <iostream>

int main() {

    std::fstream file("example.bin", std::ios::in | std::ios::out | std::ios::binary);

    if (file.is_open()) {
    
        // 파일에서 데이터 읽기
        int data;
        file.read(reinterpret_cast<char*>(&data), sizeof(data));
        std::cout << "읽은 데이터: " << data << std::endl;

        // 파일에서 데이터 쓰기
        data *= 2;
        file.seekg(0, std::ios::beg); // 파일 위치를 처음으로 이동
        file.write(reinterpret_cast<char*>(&data), sizeof(data));

        file.close();
        
    } else {
    
        std::cerr << "파일을 열 수 없습니다." << std::endl;
    }
}
728x90
Comments