CFile Class
물리적 파일과 연결되며 file을 대표하는 객체
Random Access
- FP(File Pointer) : 현재 입출력이 일어날 위치
- Read, Write연산을 통해 FP로부터 입출력 수행 후 이동.
함수
virtual BOOL CFile::Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL);
참고주소 : http://msdn.microsoft.com/en-us/library/hwbccf8z(vs.80).aspx
기본 CFile 생성자와 함게 사용되도록 만들어져 있다.
리턴 : 성공시 TRUE 실패시 FALSE. pError는 실패시에만 의미가 있다.
lpszFileName : 열고자 하는 파일 이름 문자열. 경로는 상대, 절대, 네트워크 이름이 가능하다.
nOpenFlags : 파일 접근모드
CFile::modeRead : 읽기전용, CFile::modeWrite : 쓰기전용, CFile::modeReadWrite : 읽기/쓰기,
CFile::modeCreate : 파일이 없을 경우 생성.
pError : 실패 상태를 받을 파일 예외처리 객체의 포인터.
virtual void CFile::Write(const void* lpBuf, UINT nCount);
참고주소 : http://msdn.microsoft.com/en-us/library/esb6sz20(VS.80).aspx
CFile 객체와 관련된 파일로 버퍼 데이터를 쓴다.
lpBuf : 파일로 쓸 데이터를 포함하고 있는 사용자가 제공한 버퍼의 포인터
nCount : 버퍼로부터 전송될 바이트 수. 텍스트 모드 파일을 위해 CRLF도 1글자로 세어진다.
virtual UINT CFile::Read(void* lpBuf, UINT nCount);
참고주소 : http://msdn.microsoft.com/en-us/library/ctka0kks(VS.80).aspx
CFile 객체와 관련된 파일의 버퍼로 데이터를 읽는다.
lpBuf : 파일로 읽을 데이터를 받기 위한 사용자가 제공한 버퍼의 포인터
nCount : 파일로 부터 읽게 될 바이트 수의 최대 값.
virtual ULONGLONG CFile::Seek(LONGLONG lOff, UINT nFrom);
참고주소 : http://msdn.microsoft.com/en-us/library/8c5ccz0x(VS.80).aspx
이미 열린 파일에 대한 포인터를 재조정한다.
리턴 : 성공시 파일의 시작으로 부터의 offset 바이트 수 리턴. 실패시 CFileException발생
lOff : 포인터를 이동할 바이트 수
nForm : 포인터 이동 모드. 다음 값중 반드시 하나를 선택해야 한다.
- CFile::begin : 파일의 시작으로부터 lOff 바이트 수만큼 이동
- CFile::current : 파일의 현재 위치로부터 lOff 바이트 수만큼 이동
- CFile::end : 파일의 끝에서 lOff바이트 수만큼 이동. lOff값은 음수여야 한다.
virtual ULONGLONG CFile::GetPosition( ) const;
참고주소 : http://msdn.microsoft.com/en-us/library/6b2hf282(VS.80).aspx
Seek의 다음 호출로 사용될 수 있는 파일 포인터의 현재 값을 얻는다.
리턴 : 파일 포인터
CArchive Class : 데이터를 binary로 저장.
CFile을 버퍼링
객체를 저장(출력)하고 불러오는(입력) 플래그를 가진다.
입출력을 위한 <<, >> 연산자 : 기본 데이터형이며 CObject에 대해 정의함.
virtual void CObject::Serialize(CArchive& ar);
참고주소 : http://msdn.microsoft.com/en-us/library/ct517hs4(VS.71).aspx
아카이브 객체로 현재 객체를 읽거나 쓴다.
Serialize(직렬화) : 프로그램이 만든 데이터를 Save/Load하는 작업
if(ar.IsStoring()) // 저장을 위한 재정의
if(!ar.IsStoring()) // 불러오기를 위한 재정의
virtual void CDocument::DeleteContents();
참고주소 : http://msdn.microsoft.com/en-us/library/we24ktb3(VS.80).aspx
CDocument 객체 자체를 파괴하기 않고 document의 데이터를 지우기 위해 프레임 워크에 의해 호출된다.
호출되는 시점 : File/New명령, File/Open명령, Document 클래스가 파괴되기 전.
virtual void SetModifiedFlag(BOOL bModified = TRUE);
참고주소 : http://msdn.microsoft.com/en-us/library/570zcz2s(VS.80).aspx
document를 수정한 후 이 함수를 호출한다.
bModified : document가 수정되었음을 알리는 플래그
Serialize 가능한 클래스 만들기
- CObject상속을 받는다.
- 생성자 함수를 만들어 준다.
- 헤더파일(h)에 DECLARE_SERIAL(클래스명) 매크로 추가
- 구현파일(cpp)에 IMPLEMENT_SERIAL(클래스명, 부모클래스, 버젼번호) 매크로 추가
'컴퓨터 공부 > MFC 프로그래밍' 카테고리의 다른 글
[5월 25일 2교시] MDI (0) | 2009.05.25 |
---|---|
[5월 25일 1교시] Document 읽고 쓰기 2 (0) | 2009.05.25 |
[5월 22일 1교시] MFC Collection Class (0) | 2009.05.22 |
[5월 21일 3교시] 뷰로부터 document 분리 (0) | 2009.05.21 |
[5월 21일 2교시] 트레이 아이콘 (0) | 2009.05.21 |