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) に関する記事を参照してください。
継承階層
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
のパブリック変数です。 列挙子とその意味は次のとおりです。
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: ファイルの末尾に達しました。 |
Note
これらの CFileException
原因列挙子は、CArchiveException
原因列挙子とは異なります。
Note
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
オペレーティング システム固有のエラー コード。
戻り値
特定のオペレーティング システム エラー値に対応する列挙値。
例
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"
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示