[C++] 파일 입출력
C++에서 파일 입출력
C에서는 fgets, fputs, fread, fwrite 함수를 이용해서 파일을 만들고 내용을 입력하고,
f_opens 함수를 이용해서 출력을 할 수 있었다.
그렇다면 C++에서는 어떻게 파일을 입출력할 수 있을까?
#include <fstream>
std::ofstream ofs;
std::ifstream ofs;
fstream 내에 있는 ofstream(쓰기), ifstream(읽기) 기능을 이용해서 파일 입출력을 진행할 수 있다.
파일 입력하기
ofs.open("TestBinary.abc", std::ios::binary);
C++ 에서 바이너리 파일을 만들 때 위와 같은 형식을 이용할 수 있다.
이때 구성은
ofs.open("파일이름.파일형식", 입출력모드);
입출력 모드는 아래와 같다.
- in : 파일을 읽기 모드로 연다. ifstream에서는 기본값.
- out : 파일을 쓰기 모드로 연다. ofstream에서는 기본값.
- binary : 파일을 텍스트 모드 대신 바이너리 모드로 연다.
- ate : 출력 위치가 파일의 끝에서 시작.
- app : 모든 출력이 파일의 끝에 추가됨.
- trunc : 파일의 내용을 모두 삭제하고 열기.
or 연산자를 이용하여 아래처럼 추가하고자 하는 옵션을 추가한다.
std::ios::out std::ios::app
예시코드(입력)
// 예시코드
#include <iostream>
// 파일입출력을 사용하기 위한 헤더 파일.
#include <fstream>
int main()
{
// ofstream : 파일을 만들 때 사용한다.
std::ofstream ofs;
// 바이너리 파일로 만들고 싶을 때
ofs.open("TestBinary.abc", std::ios::binary);
if (ofs.fail())
{
std::cout << "file open error!" << std::endl;
}
else
{
int HP = 300;
//ofs << HP;
/*
binary 파일을 만들 때는 write 함수를 이용해서 추가해준다.
1번 인자에는 추가하고자하는 데이터의 주소가 들어가는데 const char*로만 넣게 되어있다.
따라서 해당 변수의 주소를 const char* 로 형변환하여 넣어준다.
2번 인자에는 1번인자에 들어간 주소로부터 몇 바이트를 파일에 추가해줄지를 지정한다.
*/
ofs.write((const char*)&HP, sizeof(int));
int Attack = 100;
ofs.write((const char*)&Attack, sizeof(int));
ofs.close();
}
return 0;
}
그리고 파일을 오픈했으면 close를 반드시 실행해주자!
파일 출력하기
파일 입력할 때와 똑같이 구성은
std::ifstream ifs;
ifs.open("파일이름.파일형식", 입출력모드);
로 사용하거나,
std::ifstream ifs("파일이름.파일형식", 입출력모드);
와 같은 방식으로 사용이 가능하다.
예시코드(출력)
// 예시코드
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
std::ifstream ifs;
ifs.open("TestBinary.abc", std::ios::binary);
if (ifs.fail())
{
cout << "file open error!" << endl;
}
else
{
int HP = 0, Attack = 0;
ifs.read((char*)&HP, sizeof(int));
ifs.read((char*)&Attack, sizeof(int));
cout << "HP : " << HP << " Attack : " << Attack << endl;
ifs.close();
}
return 0;
}
위에 저장한 binary파일의 내용을 그대로 출력하고자 할때 작성한 코드이다.
이렇게 하면 결과값으로
HP : 300 Attack : 100
이 잘 출력된다.