MFC 환경에서 파일을 Read, Wirte할 때 사용할 수 있는 방법이 여러개 있는데
그중 CFile과 CArchive이 대표적으로 많이 사용된다.
MFC의 Document나 View환경에선 직렬화 관련 기본코드를 생성 해준다.
이를 이용하면 편하게 데이터를 입출력 할 수 있을 것이다.아래 간단한 예제로 사용법에 대해서 알아보자.
CFile
데이터 쓰기
CFile을 선언하고 Open()후에 입력할 데이터를 Write()함수를 통해 기록하고 Close()를 호출해줘야한다.
int a = 100;
int b = 200;
CFile file;
file.Open(_T("Test.txt"), CFile::modeCreate | CFile::modeWrite);
file.Write( a /*입력할 데이터*/, sizeof(int) /*데이터 사이즈*/)
file.Write( b /*입력할 데이터*/, sizeof(int) /*데이터 사이즈*/)
file.Close();
데이터 읽기
Open후에 Read()로 데이터를 가져와서 저장하고 마지막에 Close()를 호출 하면된다.
int a,b;
CString str;
CFile file;
file.Open(_T("Test.txt"), CFile::modeRead);
file.Read(a, sizeof(int));
file.Read(b, sizeof(int));
file.Close();
str.Format(_T("%d, %d"), a,b);
CFile은 Open() 후에 Write()나 Read()를 통해 데이터를 입출력 한다.
CArchive
이를보다 편하게 하기 위한 방법중 하나가 CArchive를 이용하는 방법이 있다.
CArchive는 기존 CFile에서 사용하던 Read()나 Write() 함수 대신 <<, >> 연산자를 이용하여 직렬화를 진행한다.
데이터 읽기와 쓰기
// 데이터 쓰기
int a = 100;
int b = 200;
CFile file;
if(!file.Open(_T("text.txt"), CFile::modeReadWrite | CFile::modeCreate))
return;
CArchive ar(&file,CArchive::store);
ar << a << b;
file.Close();
// 데이터 읽기
CFile file;
if(!file.Open(_T("test.txt"), CFile::modeRead))
return;
int a, b;
CArchive ar(&file, CArchive::load);
ar >> a >> b;
TRACE(_T("%d, %d"), a, b);
file.Close();
MFC 응용 프로그램에서는 자동으로 CArchive 객체를 생성해 준다.
사용자는 Serialize()를 재정의 하여 데이터를 저장할건지 읽어올건지 지정해주면 된다.
void CMFCSerializeTest::Serialize(CArchive& ar)
{
if(ar.IsStoring())
{
// 이곳에서 data input
ar << m_data1 << m_data2;
}
else
{
// data output
ar >> m_data1 >> m_data2;
}
}
'개발 > C++' 카테고리의 다른 글
[C++] MFC 리스트(CList/CObList/CStringList) 및 POSITION 사용법 (0) | 2021.09.09 |
---|---|
[C++] static 멤버 변수, static 멤버 함수에 대해 (+ mutable) (0) | 2021.08.24 |
[C++] 생성자, 소멸자, 복사생성자, 복사 대입 연산자, 복사생성 방지에 대한 얘기 (0) | 2021.02.17 |
안전한 정수 연산을 위해 SafeInt 를 써보자 (0) | 2020.07.13 |
VS 2017 환경에서 glog 설치 및 적용 방법 (0) | 2020.07.09 |
댓글