#27 [c++] 바이너리 IO

정상준·2022년 12월 2일
0

c++

목록 보기
23/25

📝 바이너리 IO

  • 바이너리 I/O 방식
    • 데이터의 바이너리 값을 그대로 파일에 저장하거나, 파일의 바이너리 값을 그대로 읽어서 변수나 버퍼에 저장하는 방식
    • 텍스트 파일이든 바이너리 파일이든 바이너리 I/O로 입출력가능
  • 바이너리 I/O 모드 열기
    • ios::binary 모드 속성 사용
      • ios::binary가 설정되지 않으면 디폴트가 텍스트 I/O

✏️ 바이너리 파일 복사

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

int main() {
	const char* srcFile = "c:\\temp\\Profile.jpg";
	const char* destFile = "c:\\temp\\dest.jpg";

	ifstream fsrc(srcFile, ios::in | ios::binary);

	if (!fsrc) {
		cout << "파일 열기 오류";
		return 0;
	}

	ofstream fdest(destFile, ios::out | ios::binary);
	if (!fdest) {
		cout << "파일 열기 오류";
		return 0;
	}

	int c;
	while ((c = fsrc.get())!=EOF)
	{
		fdest.put(c);
	}
	cout << "복사 완료";

	fsrc.close();
	fdest.close();
}

📝 블록단위 파일 입출력

  • 문자/바이트 단위 파일 입출력
    • get() / put()
  • 블록 단위로 파일 입출력
    • read() / write()

✏️ 블록단위로 텍스트 파일 읽기

#include <iostream>
#include <fstream>


using namespace std;

int main() {
	const char* file = "c:\\windows\\system.ini";
	ifstream fin;
	fin.open(file, ios::in | ios::binary);
	if (!fin) {
		cout << "파일 열기 오류";
		return 0;
	}

	int count = 0;
	char s[32];
	while (!fin.eof())
	{
		fin.read(s, 32);
		int n = fin.gcount();
		cout.write(s, n);
		count += n;
	}
	cout << "읽은 바이트 수는" << count << endl;
	fin.close();
}
profile
안드로이드개발자

0개의 댓글