次の方法で共有


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 式のスコープ内でアクセスできます。 移植性を高めるには、原因コードのみを使用して例外の理由を取得します。 例外の詳細については、「exception Handling (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を呼び出します。

Note

変数 lOsError は、 CFile オブジェクトと CStdioFile オブジェクトにのみ適用されます。 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
[入力、出力]エラー メッセージを受信するバッファーへのポインター。

nMaxError
[in]指定したバッファーが保持できる最大文字数。 これには、終端の NULL 文字が含まれます。

pnHelpContext
[入力、出力]ヘルプ コンテキスト ID を受け取る符号なし整数へのポインター。 NULL場合、ID は返されません。

戻り値

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: ファイルの末尾に達しました。

Note

これらの CFileException 原因列挙子は、CArchiveException 原因列挙子とは異なります。

Note

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

指定したnErrno値に対応するCFileException オブジェクトを構築し、例外をスローします。

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

パラメーター

nErrno
実行時インクルード ファイル ERRNO.Hで定義されている整数エラー コード。

lpszFileName
例外の原因となったファイルの名前を含む文字列へのポインター (使用可能な場合)。

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

CFileException::ThrowOsError

指定したlOsError値に対応するCFileExceptionをスローします。 エラー コードが不明な場合、関数は CFileException::genericとしてコーディングされた例外をスローします。

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

パラメーター

lOsError
オペレーティング システム固有のエラー コード。

lpszFileName
例外の原因となったファイルの名前を含む文字列へのポインター (使用可能な場合)。

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

関連項目

CException クラス
階層図
例外処理