CArchive
CArchive
는 <<와 >> 연산자를 사용하여 파일로부터 간단한 데이터 형식을 읽고 쓰는 것뿐만 아니라, CObject
를 사용하여 간단한 데이터 형식을 읽고 쓰는 기능을 제공합니다.
보관을 통해 파일에 개체를 저장하려면
다음 예제에서는 보관을 통해 파일에 개체를 저장하는 방법을 보여줍니다.
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
이전에 파일에 저장된 값에서 개체를 로드하려면
다음 예제에서는 이전에 파일에 저장된 값에서 개체를 로드하는 방법을 보여 줍니다.
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
일반적으로 DECLARE_SERIALIZE 매크로를 사용하여 선언해야 하는 Serialize
로부터 파생된 클래스의 CObject
함수에서 아카이브를 통해 파일에 데이터를 저장하고 로드합니다.
CArchive
개체에 대한 참조가 Serialize
함수로 전달됩니다.
IsLoading
객체의 CArchive
함수를 호출하여 Serialize
함수가 파일에서 데이터를 로드했는지 혹은 파일에 데이터를 저장했는지 여부를 확인합니다.
Serialize
serializable CObject
-derived 클래스의 함수는 일반적으로 다음과 같은 형식입니다.
void CSerializableObj::Serialize(CArchive &archive)
{
// call base class function first
// base class is CObject in this case
CObject::Serialize(archive);
// now do the stuff for our specific class
if (archive.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add storing code here
}
}
위의 코드 템플릿은 문서의 "Serialize
" 함수(파생된 "CDocument
" 클래스)에 대해 AppWizard가 만든 것과 정확히 동일합니다. 이 코드 템플릿은 다음 예제와 같이 코드 저장 및 로드 코드가 항상 병렬이어야 하므로 검토하기 쉬운 코드를 작성하는 데 도움이 됩니다.
void CEmployee::Serialize(CArchive &archive)
{
// call base class function first
// base class is CObject in this case
CObject::Serialize(archive);
// now do the stuff for our specific class
if (archive.IsStoring())
archive << m_strName << m_wAge;
else
archive >> m_strName >> m_wAge;
}
라이브러리는 <<
를 첫 번째 피연산자로, 다음 데이터 형식 및 클래스 형식을 >>
두 번째 피연산자로 연산자를 정의합니다.
BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan
COleVariant
CString
CTime
및 CTimeSpan
Double
DWORD
Float
Int
LONG
POINT
및 CPoint
RECT
및 CRect
SIZE
및 CSize
WORD
비고
아카이브를 통해 CObject
s를 저장하고 로드하려면 추가적인 고려 사항이 필요합니다. 자세한 내용은 보관을 통해 CObjects 저장 및 로드를 참조하세요.
CArchive
, <<
및 >>
연산자는 항상 첫 번째 피연산자인 CArchive
객체에 대한 참조를 반환합니다. 이렇게 하면 아래 그림과 같이 연산자를 연결할 수 있습니다.
archive << m_strName << m_wAge;