다음을 통해 공유


CFileException 클래스

파일 관련 예외 상태를 나타냅니다.

구문

class CFileException : public CException

멤버

공용 생성자

속성 설명
CFileException::CFileException CFileException 개체를 생성합니다.

공용 메서드

이름 설명
CFileException::ErrnoToException 런타임 오류 번호에 해당하는 원인 코드를 반환합니다.
CFileException::GetErrorMessage 예외를 설명하는 메시지를 검색합니다.
CFileException::OsErrorToException 운영 체제 오류 코드에 해당하는 원인 코드를 반환합니다.
CFileException::ThrowErrno 런타임 오류 번호에 따라 파일 예외를 throw합니다.
CFileException::ThrowOsError 운영 체제 오류 번호에 따라 파일 예외를 throw합니다.

공용 데이터 멤버

이름 설명
CFileException::m_cause 예외 원인에 해당하는 이식 가능한 코드를 포함합니다.
CFileException::m_lOsError 관련 운영 체제 오류 번호를 포함합니다.
CFileException::m_strFileName 이 예외에 대한 파일의 이름을 포함합니다.

설명

이 클래스에는 CFileException 이식 가능한 원인 코드와 운영 체제별 오류 번호를 포함하는 공용 데이터 멤버가 포함됩니다. 또한 이 클래스는 파일 예외를 throw하고 운영 체제 오류와 C 런타임 오류 모두에 대한 원인 코드를 반환하기 위한 정적 멤버 함수를 제공합니다.

CFileException 개체는 멤버 함수 및 파생 클래스의 멤버 함수에서 생성되고 throw CFile 됩니다. 식 범위 CATCH 내에서 이러한 개체에 액세스할 수 있습니다. 이식성을 위해 원인 코드만 사용하여 예외 이유를 가져옵니다. 예외에 대한 자세한 내용은 MFC(예외 처리) 문서를 참조하세요.

상속 계층 구조

CObject

CException

CFileException

요구 사항

헤더afx.h:

CFileException::CFileException

CFileException 원인 코드와 운영 체제 코드를 개체에 저장하는 개체를 생성합니다.

CFileException(
    int cause = CFileException::none,
    LONG lOsError = -1,
    LPCTSTR lpszArchiveName = NULL);

매개 변수

cause
예외의 이유를 나타내는 열거형 형식 변수입니다. 가능한 값 목록을 참조 CFileException::m_cause 하세요.

lOsError
사용 가능한 경우 예외에 대한 운영 체제별 이유입니다. 매개 변수는 lOsError 보다 cause 더 많은 정보를 제공합니다.

lpszArchiveName
예외를 일으키는 개체의 CFile 이름을 포함하는 문자열을 가리킵니다.

설명

이 생성자를 직접 사용하지 말고 전역 함수 AfxThrowFileException를 호출합니다.

참고 항목

변수 lOsError 는 개체에 CFileCStdioFile 만 적용됩니다. 클래스는 CMemFile 이 오류 코드를 처리하지 않습니다.

CFileException::ErrnoToException

지정된 런타임 라이브러리 오류 값을 열거형 오류 값으로 CFileException 변환합니다.

static int PASCAL ErrnoToException(int nErrno);

매개 변수

nErrno
런타임 포함 파일에 ERRNO.H정의된 정수 오류 코드입니다.

Return Value

지정된 런타임 라이브러리 오류 값에 해당하는 열거형 값입니다.

설명

가능한 열거형 값 목록을 참조 CFileException::m_cause 하세요.

예시

ASSERT(CFileException::ErrnoToException(EACCES) == 
   CFileException::accessDenied);

CFileException::GetErrorMessage

예외를 설명하는 텍스트를 검색합니다.

virtual BOOL GetErrorMessage(
    LPTSTR lpszError,
    UINT nMaxError,
    PUINT pnHelpContext = NULL) const;

매개 변수

lpszError
[in, out] 오류 메시지를 받는 버퍼에 대한 포인터입니다.

nMaxError
[in] 지정된 버퍼가 보유할 수 있는 최대 문자 수입니다. 여기에는 종료 문자가 NULL 포함됩니다.

pnHelpContext
[in, out] 도움말 컨텍스트 ID를 받는 부호 없는 정수에 대한 포인터입니다. 이면 NULLID가 반환되지 않습니다.

Return Value

TRUE 메서드가 성공하면 이고, 그렇지 않으면 FALSE.

설명

지정된 버퍼가 너무 작으면 오류 메시지가 잘립니다.

예시

다음 예에서는 CFileException::GetErrorMessage를 사용합니다.

CFile fileInput;
CFileException ex;

// try to open a file for reading.
// The file will certainly not
// exist because there are too many explicit
// directories in the name.

// if the call to Open() fails, ex will be
// initialized with exception
// information.  the call to ex.GetErrorMessage()
// will retrieve an appropriate message describing
// the error, and we'll add our own text
// to make sure the user is perfectly sure what
// went wrong.

if (!fileInput.Open(_T("\\Too\\Many\\Bad\\Dirs.DAT"), CFile::modeRead, &ex))
{
   TCHAR szCause[255];
   CString strFormatted;

   ex.GetErrorMessage(szCause, 255);

   // (in real life, it's probably more
   // appropriate to read this from
   //  a string resource so it would be easy to
   // localize)

   strFormatted = _T("The data file could not be opened because of this error: ");
   strFormatted += szCause;

   AfxMessageBox(strFormatted);
}
else
{
   // the file was opened, so do whatever work
   // with fileInput
   // we were planning...

   fileInput.Close();
}

CFileException::m_cause

CFileException 열거형 형식으로 정의되는 값을 포함합니다.

int m_cause;

설명

이 데이터 멤버는 형식 int의 공용 변수입니다. 아래에 열거자와 해당 의미가 나와 있습니다.

오류 값과 의미
CFileException::none 0: 오류가 발생하지 않았습니다.
CFileException::genericException 1: 지정되지 않은 오류가 발생했습니다.
CFileException::fileNotFound 2: 파일을 찾을 수 없습니다.
CFileException::badPath 3: 경로의 전체 또는 일부가 잘못되었습니다.
CFileException::tooManyOpenFiles 4: 허용된 열린 파일 수를 초과했습니다.
CFileException::accessDenied 5: 파일에 액세스할 수 없습니다.
CFileException::invalidFile 6: 잘못된 파일 핸들을 사용하려고 했습니다.
CFileException::removeCurrentDir 7: 현재 작업 디렉터리를 제거할 수 없습니다.
CFileException::directoryFull 8: 디렉터리 항목이 더 이상 없습니다.
CFileException::badSeek 9: 파일 포인터를 설정하려고 하는 동안 오류가 발생했습니다.
CFileException::hardIO 10: 하드웨어 오류가 발생했습니다.
CFileException::sharingViolation 11: SHARE.EXE 로드되지 않았거나 공유 지역이 잠겨 있습니다.
CFileException::lockViolation 12: 이미 잠긴 지역을 잠그려는 시도가 있었습니다.
CFileException::diskFull 13: 디스크가 가득 찼습니다.
CFileException::endOfFile 14: 파일 끝에 도달했습니다.

참고 항목

이러한 CFileException 원인 열거자는 CArchiveException 원인 열거자와는 다릅니다.

참고 항목

CArchiveException::generic는 사용되지 않습니다. 대신 genericException을 사용합니다. 애플리케이션에서 사용되고 빌드/clr된 경우 generic 결과 구문 오류는 해독하기 쉽지 않습니다.

예시

try
{
   CFile f(_T("M_Cause_File.dat"), CFile::modeWrite);
}
catch(CFileException* e)
{
   if( e->m_cause == CFileException::fileNotFound)
      TRACE(_T("ERROR: File not found\n"));
   e->Delete();
}

CFileException::m_lOsError

이 예외에 대한 운영 체제 오류 코드를 포함합니다.

LONG m_lOsError;

설명

오류 코드 목록은 운영 체제 기술 설명서를 참조하세요. 이 데이터 멤버는 형식 LONG의 공용 변수입니다.

CFileException::m_strFileName

이 예외 조건에 대한 파일의 이름을 포함합니다.

CString m_strFileName;

CFileException::OsErrorToException

지정된 lOsError 값에 해당하는 열거자를 반환합니다. 오류 코드를 알 수 없는 경우 함수는 .를 반환합니다 CFileException::generic.

static int PASCAL OsErrorToException(LONG lOsError);

매개 변수

lOsError
운영 체제별 오류 코드입니다.

Return Value

지정된 운영 체제 오류 값에 해당하는 열거형 값입니다.

예시

ASSERT(CFileException::OsErrorToException(ERROR_ACCESS_DENIED) == 
   CFileException::accessDenied);

CFileException::ThrowErrno

지정된 nErrno 값에 CFileException 해당하는 개체를 생성한 다음 예외를 throw합니다.

static void PASCAL ThrowErrno(int nErrno, LPCTSTR lpszFileName = NULL);

매개 변수

nErrno
런타임 포함 파일에 ERRNO.H정의된 정수 오류 코드입니다.

lpszFileName
예외를 발생시킨 파일의 이름을 포함하는 문자열에 대한 포인터입니다(사용 가능한 경우).

예시

CFileException::ThrowErrno(EACCES);  // "access denied"

CFileException::ThrowOsError

지정된 lOsError 값에 CFileException 해당하는 값을 throw합니다. 오류 코드를 알 수 없는 경우 함수는 로 코딩된 CFileException::generic예외를 throw합니다.

static void PASCAL ThrowOsError(LONG lOsError, LPCTSTR lpszFileName = NULL);

매개 변수

lOsError
운영 체제별 오류 코드입니다.

lpszFileName
예외를 발생시킨 파일의 이름을 포함하는 문자열에 대한 포인터입니다(사용 가능한 경우).

예시

CFileException::ThrowOsError(ERROR_ACCESS_DENIED);  // "access denied"         

참고 항목

CException 클래스
계층 구조 차트
예외 처리