|
MFC파일 입출력 |
조 : 3조 |
작성자 : 김택환 | |
작성일 : 2011.2.20 | |
제목 : CArchive를 이용한 간단한 파일 저장하기, 불러오기 |
CArchive클래스 CArchive Class는 CDocument Class와 CFile Class를 연결해 주는 역할을 한다. CFile Class는 파일을 파일을 관리하는 기능을함. Archive Class를 이용하면 데이터를 파일에 저장 하거나 파일로부터 데이터를 읽어올 수 있다. CMemfile Class와 CSocketFile Class와도 연결될 수 있다. CArchive오브젝틀와 CFile오브젝트를 연결 시켜 주는 일은 CDocument클래스의 OnOpenDocument와 OnSaveDocument함수가 수행한다. Serialize함수로 넘어온 CArchive오브젝트는 파일로부터 읽어오거나 저장할 준비 가 다되어있다는 것이다.
※IsStoring함수는 현제 데이터를 저장하고 있는 중인지 읽어 오고 있는 중인지를 알아내는 함수이다. OnOpenDocument함수에서 Serialize함수를 호출한 경우: FALSE |
CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWITEPROMPT, OPCTSTR loszFilter = NULL, CWnd * pParenWnd = NULL ) | |
매개 변수 |
의미 |
bOpenFileDialog |
TRUE : 열기 FALSE : 다른 이름으로 저장 타이틀 바에 출력 |
lpszDefExt |
기본 확장자를 지정 해 둘 수 있다. |
lpszFileName |
대화 상자 출력 시 기본 파일 이름을 지정 |
dwFlags |
속성 OR 연사자로 조립하여 지정 |
lpszFilter |
확장자에 의해서 걸러 낸다. |
pParentWnd |
부모 윈도우를 지정 한다. |
File file; File.Open(확장자 명이 포함된 파일명, 파일 접근 모드)
File.Close()
|
double pi = 3.14; ar.Write(&pi, sizeof(double));//ar << msg; ar.Read(&pi, sizeof(double));//ar >> msg; |
※이 예제는 Document없이 Serialize를 사용하였다.
void CArchiveDlg::OnBnClickedSave() { WCHAR extention[] =TEXT("txt");//기본 파일 형식 WCHAR szFilter[] = TEXT("text File(*.txt)|*.txt|");//파일 형식 지정 WCHAR init[] =TEXT("입력해주세요");//파일 이름에 초기값 지정 CFile file; CFileDialog dlg(false,extention,init, //false : 다른이름으로 저장 OFN_FILEMUSTEXIST|OFN_OVERWRITEPROMPT,szFilter); if(IDOK == dlg.DoModal()) { if(!file.Open(dlg.GetPathName(),CFile::modeCreate| CFile::modeWrite|CFile::typeBinary))
{ MessageBox(TEXT("저장파일을 생성할 수 없습니다."), TEXT("경고"),MB_OK | MB_ICONHAND); return; }else { UpdateData(true); save = dlg.GetFileName(); CArchive ar(&file,CArchive::store); Serialize(ar); ar.Close();//CArchive를Close하고(순서를지킨다.) file.Close();//file을Close하여야한다. } } } |
void CArchiveDlg::OnBnClickedCall() { WCHAR extention[] =TEXT("txt"); WCHAR szFilter[] = TEXT("text File(*.txt)|*.txt|"); WCHAR init[] =TEXT("입력해주세요"); CFileDialog dlg(true, extention,init,OFN_OVERWRITEPROMPT,szFilter); //true : 열기 CFile file; if(IDOK == dlg.DoModal()) { if(!file.Open(dlg.GetPathName(),CFile::modeRead |CFile::typeBinary)) { MessageBox(TEXT("저장파일을생성할수없습니다."), TEXT("경고"),MB_OK | MB_ICONHAND); return; }else { call = dlg.GetFileName(); CArchive ar(&file,CArchive::load); Serialize(ar); ar.Close(); file.Close(); } } } |
void CArchiveDlg::Serialize(CArchive &ar) { CObject::Serialize(ar); if(ar.IsStoring()) { ar << msg; UpdateData(false); } else { ar >> soutput; UpdateData(false); } } |
|