거의 알고리즘 일기장

파일 입출력 기본 _ 아스키 파일, 바이너리 파일 본문

c++ 문법

파일 입출력 기본 _ 아스키 파일, 바이너리 파일

건우권 2020. 5. 2. 19:34

아스키 파일, 바이너리 파일 특징

아스키 파일 : 입출력이 상대적으로 간단함, 느림

바이너리 파일 : 입출력이 상대적으로 복잡함, 빠름

( 바이너리 파일은 이진수로 저장되기 때문에 데이터가 어디까진지 알수가없음 그래서 데이터를 몇개를 보낼건지 보내는 사람, 읽는 사람 모두 알고있어야 한다는 불편함이 있다. )


아스키파일 입출력 코드

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

using namespace std;

int main()
{
	//write, read밑에 if문 true, false를 이용해서 마음대로 조절하세요.

	//수동으로 닫을 수도 있지만 이렇게 하는경우가 많음
	//write
	if(false)
	{
		ofstream ofs("my_first_file.dat");
		//ofs.open("my_first_file.dat");

		if (!ofs)
		{
			cerr << "Cannot open file" << endl;
			exit(1);
		}

		ofs << "Line 1" << endl;
		ofs << "Line 2" << endl;
		ofs << "Hahaha!!" << endl;
		//ofs.close();
	}

	//read
	if(true)
	{
		//default : 아스키코드
		ifstream ifs("my_first_file.dat");

		if (!ifs)
		{
			cerr << "Cannot open file" << endl;
			exit(1);
		}

		while (ifs)
		{
			string str;
			getline(ifs, str);

			cout << str << endl;
		}
	}

	return 0;
}

바이너리파일 입출력 코드

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

using namespace std;

int main()
{
	//write, read밑에 if문 true, false를 이용해서 마음대로 조절하세요.
	//수동으로 닫을 수도 있지만 이렇게 하는경우가 많음
	//write
	if(true)
	{
		//모드가 여러가지임 ios::app는 원래있는 것에 추가, default는 덮어쓰기 
		ofstream ofs("my_first_file.dat"); 
		//ofs.open("my_first_file.dat");

		if (!ofs)
		{
			cerr << "Cannot open file" << endl;
			exit(1);
		}

		const unsigned num_data = 10;
		//쓰는 파일이 몇개인지 사이즈를 미리 저장
		ofs.write((char*)&num_data, sizeof(num_data));
		
		for (int i = 0; i < num_data; i++)
			ofs.write((char*)&i, sizeof(i));

		//ofs.close();
	}

	//read
	if(true)
	{
		ifstream ifs("my_first_file.dat");

		if (!ifs)
		{
			cerr << "Cannot open file" << endl;
			exit(1);
		}

		unsigned num_data = 0;
		//몇개의 데이터인지 사이즈를 미리 읽음
		ifs.read((char*)&num_data, sizeof(num_data));

		for (unsigned i = 0; i < num_data; i++)
		{
			int num;
			ifs.read((char*)&num, sizeof(num));

			cout << num << endl;
		}
	}

	return 0;
}

참조

홍정모의 따라하며 배우는 c++ 참고

반응형

'c++ 문법' 카테고리의 다른 글

람다함수와 std::function  (0) 2020.05.06
파일의 임의 위치 접근하기  (0) 2020.05.06
정규 표현식  (0) 2020.05.02
흐름상태와 입력 유효성 검사  (0) 2020.05.02
stringstream 기본용법  (0) 2020.05.02
Comments