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)記事を参照してください。
継承階層
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"