[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

이 잘 출력된다.


© 2022.07. by Wookey_Kim

Powered by Hydejack v7.5.2