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

+ Recent posts