다음을 통해 공유


CFile::Open

오버로드. 열기 기본으로 설계 된 CFile 생성자입니다.

virtual BOOL Open( 
   LPCTSTR lpszFileName, 
   UINT nOpenFlags, 
   CFileException* pError = NULL  
); 
virtual BOOL Open( 
   LPCTSTR lpszFileName, 
   UINT nOpenFlags, 
   CAtlTransactionManager* pTM, 
   CFileException* pError = NULL 
);

매개 변수

  • lpszFileName
    원하는 파일 경로 문자열입니다. 경로 상대, 절대 경로 또는 네트워크 (UNC) 이름을 수 있습니다.

  • nOpenFlags
    A UINT 는 파일의 공유 및 액세스 모드를 정의 합니다. 파일을 열 때 수행할 작업을 지정 합니다. 비트 OR (사용 하 여 옵션을 결합할 수 있습니다. |) 연산자. 액세스 권한 및 하나의 공유 옵션 필수입니다. modeCreatemodeNoInherit 모드는 선택 사항입니다. 참조는 CFile 생성자 모드 옵션의 목록.

  • pError
    실패 한 작업의 상태를 받는 기존 예외 파일 개체에 대 한 포인터입니다.

  • pTM
    CAtlTransactionManager 개체에 대 한 포인터

반환 값

열기에 성공 하면 0이 아닌. 그렇지 않으면 0입니다. pError 매개 변수는 0을 반환 하면 의미 있는입니다.

설명

"안전" 정상적이 고 예상 조건 오류가 있는 파일을 열 방법을 두 가지 기능을 형성 합니다.

동안에 CFile 생성자는 오류 조건에서 예외를 발생 합니다 열려 반환 합니다 FALSE 오류 조건에 대 한. 하지만 열기 여전히 초기화할 수는 CFileException 오류를 설명 하는 개체입니다. 지정 하지 않은 경우는 pError 매개 변수를 전달 하는 경우 또는 NULL 에 pError, 열기 반환 합니다 FALSE throw 하지는 CFileException. 기존에 포인터를 전달 하는 경우 CFileException, 및 열려 만나는 오류 함수 됩니다 채우기가 해당 오류를 설명 하는 정보를 합니다. 두 사례는에서 열려 예외를 throw 합니다.

다음 표에서 가능한 결과의 열려.

pError

오류가 발생 했습니다.

반환 값

CFileException 콘텐츠

NULL

아니요

TRUE

n/a

ptr에CFileException

아니요

TRUE

변경 하지 않고

NULL

FALSE

n/a

ptr에CFileException

FALSE

초기화 오류에 설명 합니다.

예제

CFile f;
CFileException e;
TCHAR* pszFileName = _T("Open_File.dat");
if(!f.Open(pszFileName, CFile::modeCreate | CFile::modeWrite, &e))
{
   TRACE(_T("File could not be opened %d\n"), e.m_cause);
}
//A second example for CFile::Open. 
//This function uses CFile to copy binary files. 
bool BinaryFileCopy(LPCTSTR pszSource, LPCTSTR pszDest)
{
   // constructing these file objects doesn't open them
   CFile sourceFile;
   CFile destFile;

   // we'll use a CFileException object to get error information
   CFileException ex;

   // open the source file for reading 
   if (!sourceFile.Open(pszSource,
      CFile::modeRead | CFile::shareDenyWrite, &ex))
   {
      // complain if an error happened 
      // no need to delete the ex object

      TCHAR szError[1024];
      ex.GetErrorMessage(szError, 1024);
      _tprintf_s(_T("Couldn't open source file: %1024s"), szError);
      return false;
   }
   else
   {
      if (!destFile.Open(pszDest, CFile::modeWrite |
         CFile::shareExclusive | CFile::modeCreate, &ex))
      {
         TCHAR szError[1024];
         ex.GetErrorMessage(szError, 1024);
         _tprintf_s(_T("Couldn't open source file: %1024s"), szError);

         sourceFile.Close();
         return false;
      }

      BYTE buffer[4096];
      DWORD dwRead;

      // Read in 4096-byte blocks, 
      // remember how many bytes were actually read, 
      // and try to write that many out. This loop ends 
      // when there are no more bytes to read. 
      do
      {
         dwRead = sourceFile.Read(buffer, 4096);
         destFile.Write(buffer, dwRead);
      }
      while (dwRead > 0);

      // Close both files

      destFile.Close();
      sourceFile.Close();
   }

   return true;
}

요구 사항

헤더: afx.h

참고 항목

참조

CFile 클래스

계층 구조 차트

CFile::CFile

CFile::Close