CFile 클래스는 파일을 객체화한 MFC 클래스로 CArchive 클래스와 더불어 직렬화를 구현할 때도 사용하고, 관계없이 파일 입/출력에도 사용한다. 일반적인 파일 입/출력의 경우 MFC 기반으로 작성하더라도 ::Createfile(), ::ReadFile(), ::WriteFile() 함수를 사용하거나 fopen(), fprintf(), fscanf(). fread(), fwrite() 같은 ANSI-C 함수를 사용하는 경우가 더 많다.
CFile 클래스의 생성자는 다중 정의되어 있는데 ::CreateFile() 함수를 이용하여 생성한 파일 핸들을 인자로 갖는 생성자가 있다는 사실도 알아두어야 한다. hFile 인자가 CreateFile() 함수가 반환하는 파일의 핸들을 말하는데, 주로 API 프로그래밍 방식의 코드에 CFile 클래스를 적용할 때 유용하다. lpszFileName은 파일의 경로를 담는 버퍼의 주소가 되고, nOpenFlags 인자는 파일을 어떤모드로 열 것인지 명시하는 플래그이며, 이 값은 fopen() 함수의 모드처럼 다양한 조합이 가능하다.
다음은 CFile 클래스와 Write() 메서드를 활용한 예다.
void CFileOPDlg::OnBnClickedButtonOpen()
{
CString strTmp = _T("CFile class test string");
char* strTmp2 = "CFile class test string\r\n";
//\r\n 을 해줘야 문자열이 안깨진다. 또한 _T 로 감싸면 안된다.
CFile File(_T("MakingFile.txt"),
CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate);
File.SeekToEnd(); //파일의 포인터를 제일 끝으로 가게한다.
File.Write(strTmp, strTmp.GetLength());
//modeCreate 파일을 생성하라는 의미
//modeNoTruncate 를 조합하면 파일의 길이가 0으로 강제조정안되고 본래 크기 유지.
//modeReadWrite 읽기 쓰기 권한을 모두 부여한다. 만일 이 플래그를 빼면 접근시도시 오류
CFile File2(_T("MakingFile2.txt"),
CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate);
File2.SeekToEnd();
File2.Write(strTmp2, strlen(strTmp2));
//Close() 메서드를 호출하는 코드가 없는 이유는 소멸자가 호출될 때 자동으로 호출하기 때문.
//Open() 메서드는 생성자와 동일한 기능(파일 열기)을 하며,
//bool형의 값을 반환하므로 파일 열기에 성공했는지 확인이 가능하다
//또한 CFileException 클래스 객체의 주소를 인자로 받아 구조적인 예외 처리가 가능하다.
}
void CFileOPDlg::OnBnClickedButtonRead()
{
CString strTmp=_T("");
char szBuffer[32] = {0};
CFile File;
if( !File.Open(_T("MakingFile2.txt"), CFile::modeRead | CFile::shareDenyRead | CFile::shareDenyWrite, NULL))
//DenyRead,Write 플래그는 다른 프로세스가 파일에 접근하지 못하도록 설정할 때 사용한다.
File.Read(szBuffer, sizeof(szBuffer));
strTmp = szBuffer;
AfxMessageBox(strTmp);
CFile File2;
File2.Open(_T("Makingfile1.txt"),
CFile::modeCreate | CFile::modeReadWrite); //새로 만들고 읽기쓰기 권한가진다.
ULONGLONG dwNewLength = 10000000000; //바이트 단위로
File2.SetLength(dwNewLength); //파일크기를 강제로 설정한다(현 10기가)
}
'Windows > MFC' 카테고리의 다른 글
MFC 객체 간의 접근 방법 (0) | 2011.11.19 |
---|---|
CArchive 클래스 (0) | 2011.11.19 |
SDI 템플릿 (0) | 2011.11.19 |
더블 버퍼링 (0) | 2011.11.19 |
스크롤 뷰 ( Scroll View ) (0) | 2011.11.19 |