CArchive 클래스는 CObject 클래스처럼 기본클래스가 없는 MFC 클래스 중 하나로 직렬화를 완성하는데 중요한 역활을 한다. CFile 클래스와 더불어 파일 객체를 하나의 아카이브로 추상화하고, << 와 >> 을 이용해 변수나 클래스 객체를 해당 파일에 입.출력하는 인터페이스를 제공한다. MFC가 제공하는 문서,뷰 구조에서 파일은 CArchive 클래스 객체로 추상화되어 제공되며, CArchive 클래스와의 연동과 활용 방법을 이해하면 개발의 편의를 누릴 수 있다.

한가지 독특한 점은 CFile 클래스가 아닌 CSocket 과 CSocketFile 클래스로 네트워크 입/출력을 추상화할 수 있으며, 이 것은 GDI 프로그래밍에서 DC를 다루는 코드 하나로 프린터 출력까지 한 번에 했던 것과 비슷한 이치이다. 그러나 직렬화를 이용한 네트워크 프로그래밍은 추천하지 않으며, 절대 하지 않는게 바람직하다.

다음은 CArchive 클래스와 CFile 클래스를 연동하여 파일을 읽어들이는 예제다.



void CFileOPDlg::OnBnClickedButtonReadfromarchive()
{
 CString strTmp = _T("");
 char szBuffer[32] ={0};

 CFile File;
 if(!File.Open(_T("MakingFile2.txt"), CFile::modeRead ))
  return;

 

 //CFile 클래스와 연동하여 객체생성. 읽기모드, File객체에도 읽기모드가 있어야 한다. 
 //1번째 인자에, CSocketFile 클래스 객체의 주소를 명시한다면 소켓을 직렬화할 수도 있다.
 CArchive ar(&File, CArchive::load);  

// ar>>strTmp;

 for(int i=0; i<File.GetLength(); ++i) //파일에 있는 문자열만큼 루프를 돈다.
 {
  ar >> ch;  //파일(ar)을 읽어서 ASCII 영문자 하나를 ch에 넣는다.
  strTmp += ch;   //ch의 내용을 strTmp에 하나씩 누적하여 저장한다.
  //이렇게해도 되지만 For문 없이 ar>>strTmp; 도 가능하다. 그러나 그렇게 할려면 저장할때도 ar<<strtmp;해야한다.

 }

 AfxMessageBox(strTmp);
}

'Windows > MFC' 카테고리의 다른 글

특별한 메시지 - 사용자 정의 메시지  (0) 2011.11.20
MFC 객체 간의 접근 방법  (0) 2011.11.19
CFile 클래스  (0) 2011.11.19
SDI 템플릿  (0) 2011.11.19
더블 버퍼링  (0) 2011.11.19

+ Recent posts