본문 바로가기

# IT, Computer Science/MFC, API

[MFC] CFileDialog 파일을 읽거나 저장할때 창띄우기

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

파일에 변수의 내용을 직렬화 해서 저장,읽어들이는 예제

CFileDialog dlg(
TRUE(읽기)/FALSE(저장),
기본확장자,
기본파일명,
열기모드->MSDN 참고,
파일창 아래쪽에 나오는 필터링
)


파일을 열어 변수에 읽어들일때
char szFilter[] = "PCMON (*.CFG) | All Files(*.*)|*.*||";
CFileDialog dlg(TRUE, "cfg", "pcmon", OFN_HIDEREADONLY, szFilter);
if(IDOK == dlg.DoModal())
{
CString strPathName = dlg.GetPathName();
CFile fp;
CFileException e;
if(!fp.Open(strPathName, CFile::modeRead, &e)) {
e.ReportError();
return;
}

CString str;
CArchive ar(&fp, CArchive::load);
ar >> str;
}

파일을 선택해서 저장할때
char szFilter[] = "PCMON (*.CFG) | All Files(*.*)|*.*||";
CFileDialog dlg(FALSE, "cfg", "pcmon", OFN_HIDEREADONLY, szFilter);
if(IDOK == dlg.DoModal())
{
CString strPathName = dlg.GetPathName();

CFile fp;
CFileException e;
if(!fp.Open(strPathName,CFile::modeWrite|CFile::modeCreate, &e)) {
e.ReportError();
return;
}

CString str = _T("문자열");
CArchive ar(&fp, CArchive::store);
ar << str;
}

레퍼런스 : http://six605.tistory.com/187

■ CFileDialog 파일 열기/저장 대화상자






※ 공통 대화상자 클래스 존재의 이유
- 자주 사용되는 대화상자 UI를 MFC 에서 제공


※ 공통 대화상자의 종류
- CFileDialog
- CFontDialog
- CColorDialog
- CPageSeupDialog
- CPrintDialog
- CFineReplaceDialog
- COleDialog



1. CFileDialog
- 파일 열기/저장 대화상자


2. 생성자 함수 원형
CFileDialog(BOOL bOpenFileDialog,
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL );

bOpenFileDialog

TRUE:열기, FALSE: 다른 이름으로저장

lpszDefExt

기본 확장자.

lpszFileName

대화상자가 처음 출력되었을 때 "파일 이름" Edit 컨트롤에 출력될 파일명 지정

dwFlags

OFN_EXPLOPER

윈도우 탐색기 스타일로 출력

OFN_ARROWMULTISELECT

파일을 한번에 여러개 선택 가능

OFN_CREATEPROMPT

존재하지 않는 파일명을 입력했을 경우 새로 생성하겠냐는 메시지 박스 출력

OFN_FILEMUSTEXIST

존재하지 않는 파일명을 입력할 수 없도록 함

OFN_HIDEREADONLY

읽기전용 파일은 출력하지 않음

OFN_LONGNAMES

긴 파일 이름 포맷 지원

OFN_OVERWRITEPROMPT

존재하는 파일명을 입력했을 경우 덮어쓰겠냐는 메시지 박스 출력

OFN_PATHMUSTEXIST

이미 존재하는 디렉터리명만을 입력

lpszFilter

대화상자에 출력될 파일들을 확장자에 의해서 걸러지도록 하기 위한 필터 지정

pParentWnd

대화상자의 부모 윈도우 지정


 ※ OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST : 존재하지 않는 파일을 사용자가 직접 입력하였을때
대화상자가 종료 되지 않도록 함.
※ lpszFilter 예) "EXE Files(*.exe)|*.exe|ALL FIles(*.*)|*.*||"


3. 멤버 함수
- CString GetPathName() 선택된 파일의 절대 경로
- CString GetFileName() 선택된 파일의 이름과 확장자
- CString GetFileExt() 선택된 파일의 확장자
- CString GetFileTitle() 선택된 파일의 파일명
- BOOL GetReadOnlyPref() 읽기 전용 여부
- POSITION GetStartPosition() 다중 선택에서 사용
- CString GetNextPathName() 다중 선택에서 사용



4. 사용 예
- 한개의 파일 선택

char szFilter[] =
"Image (*.BMP, *.GIF, *.JPG) | *.BMP;*.GIF;*.JPG | All Files(*.*)|*.*||";
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter);
if(IDOK == dlg.DoModal())
{
CString strPathName = dlg.GetPathName();
}
 






출처 : http://hairchul.tistory.com/tag/%ED%8C%8C%EC%9D%BC%EC%9D%BD%EA%B8%B0