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(예외 처리) 문서를 참조하세요.
상속 계층 구조
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
는 개체에 CFile
CStdioFile
만 적용됩니다. 클래스는 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를 받는 부호 없는 정수에 대한 포인터입니다. 이면 NULL
ID가 반환되지 않습니다.
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
의 공용 변수입니다. 아래에 열거자와 해당 의미가 나와 있습니다.
Error | 값과 의미 |
---|---|
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"