共用方式為


CFileException 類別

表示檔案相關的例外狀況。

語法

class CFileException : public CException

成員

公用建構函式

名稱 描述
CFileException::CFileException 建構 CFileException 物件。

公用方法

名稱 描述
CFileException::ErrnoToException 傳回與運行時間錯誤號碼對應的程序代碼。
CFileException::GetErrorMessage 擷取描述例外狀況的訊息。
CFileException::OsErrorToException 傳回對應至操作系統錯誤碼的原因碼。
CFileException::ThrowErrno 根據運行時間錯誤號碼擲回檔案例外狀況。
CFileException::ThrowOsError 根據操作系統錯誤號碼擲回檔案例外狀況。

公用資料成員

名稱 描述
CFileException::m_cause 包含對應至例外狀況原因的可攜式程序代碼。
CFileException::m_lOsError 包含相關的作業系統錯誤號碼。
CFileException::m_strFileName 包含這個例外狀況的檔名。

備註

類別 CFileException 包含可攜式原因碼和操作系統特定錯誤號碼的公用數據成員。 類別也提供靜態成員函式來擲回檔案例外狀況,以及傳回操作系統錯誤和 C 運行時間錯誤的原因碼。

CFileException 物件會在成員函式和衍生類別的成員函式中建構和擲回 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中所定義的整數錯誤碼。

傳回值

對應至指定運行時間連結庫錯誤值的列舉值。

備註

如需可能列舉值的清單,請參閱 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]接收說明內容標識碼之無符號整數的指標。 如果 NULL為 ,則不會傳回任何標識符。

傳回值

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。 如果在 generic 應用程式中使用 ,並使用 建置 /clr,則產生的語法錯誤並不容易譯碼。

範例

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
操作系統特定的錯誤碼。

傳回值

對應至指定操作系統錯誤值的列舉值。

範例

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

CFileException::ThrowErrno

CFileException建構對應至指定nErrno值的對象,然後擲回例外狀況。

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

參數

nErrno
運行時間包含檔案 ERRNO.H中所定義的整數錯誤碼。

lpszFileName
字串的指標,如果可用,則包含造成例外狀況之檔名的字串。

範例

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

CFileException::ThrowOsError

CFileException 回對應至指定 lOsError 值的 。 如果錯誤碼未知,則函式會擲回編碼為的 CFileException::generic例外狀況。

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

參數

lOsError
操作系統特定的錯誤碼。

lpszFileName
字串的指標,如果可用,則包含造成例外狀況之檔名的字串。

範例

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

另請參閱

CException
階層架構圖表
例外狀況處理