본문 바로가기

세상사는이야기

C++ binary file

반응형

c++에서는 file stream이라는 것을 제공합니다.

file stream의 기본은 text file이여서 binary file로 사용하려면 문제가 발생합니다.

특히 ofstream에서는 "0x0d"뒤 자동으로 "0x0a"값이 들어가고 ifstream에서는 eof를 잘 못 인식하는 경우가 발생합니다.

 

1. ofstream 에서는 다음과 같이 생성해야 합니다.

ofstream out(fullpath, std::ofstream::binary);

 

2. ifstream에서는 다음과 같이 생성해서 버퍼로 읽어야 합니다.

std::string fullpath = "test.bin";
ifstream in(fullpath, std::ifstream::binary);
UINT8 *p_string = new UINT8[4096];

// get its size:
in.seekg(0, std::ios::end);
int fileSize = in.tellg();
in.seekg(0, std::ios::beg);
// read the data:
int nCount = 0;
while (nCount < fileSize) {
	in.read((char *)p_string, 0x10);
	int nStreamReadSize = in.gcount();
	if (nStreamReadSize != nReadSize) {
		std::cout << "Error..." << std::endl;
	}

	if (in.eof()) {
		std::cout << "EOF" << std::endl;
	}
	if(in.fail()) {
		std::cout << GetLastError() << std::endl;
		//throw std::system_error{ errno, std::generic_category(), fullpath };
	}
	nCount += nStreamReadSize;
}
in.close();
반응형