Partager via


La classe CFileException

Représente une condition d'exception liée à un fichier.

Syntaxe

class CFileException : public CException

Membres

Constructeurs publics

Nom Description
CFileException::CFileException Construit un objet CFileException.

Méthodes publiques

Nom Description
CFileException::ErrnoToException Retourne le code correspondant à un numéro d’erreur d’exécution.
CFileException::GetErrorMessage Récupère le message décrivant une exception.
CFileException::OsErrorToException Retourne un code de cause correspondant à un code d’erreur du système d’exploitation.
CFileException::ThrowErrno Lève une exception de fichier en fonction d’un numéro d’erreur d’exécution.
CFileException::ThrowOsError Lève une exception de fichier en fonction d’un numéro d’erreur du système d’exploitation.

Membres de données publics

Nom Description
CFileException::m_cause Contient du code portable correspondant à la cause de l’exception.
CFileException::m_lOsError Contient le numéro d’erreur du système d’exploitation associé.
CFileException::m_strFileName Contient le nom du fichier pour cette exception.

Notes

La CFileException classe inclut les membres de données publiques qui contiennent le code de cause portable et le numéro d’erreur spécifique au système d’exploitation. La classe fournit également des fonctions membres statiques pour lever des exceptions de fichier et pour retourner des codes de cause pour les erreurs du système d’exploitation et les erreurs d’exécution C.

CFileException les objets sont construits et levées dans CFile les fonctions membres et dans les fonctions membres des classes dérivées. Vous pouvez accéder à ces objets dans l’étendue d’une CATCH expression. Pour la portabilité, utilisez uniquement le code de cause pour obtenir la raison d’une exception. Pour plus d’informations sur les exceptions, consultez l’article Gestion des exceptions (MFC).

Hiérarchie d'héritage

CObject

CException

CFileException

Spécifications

En-têteafx.h:

CFileException::CFileException

Construit un CFileException objet qui stocke le code de cause et le code du système d’exploitation dans l’objet.

CFileException(
    int cause = CFileException::none,
    LONG lOsError = -1,
    LPCTSTR lpszArchiveName = NULL);

Paramètres

cause
Variable de type énumérée qui indique la raison de l’exception. Consultez CFileException::m_cause la liste des valeurs possibles.

lOsError
Raison spécifique au système d’exploitation de l’exception, le cas échéant. Le lOsError paramètre fournit plus d’informations que cause cela.

lpszArchiveName
Pointe vers une chaîne contenant le nom de l’objet à l’origine CFile de l’exception.

Notes

N’utilisez pas ce constructeur directement, mais appelez plutôt la fonction AfxThrowFileExceptionglobale.

Remarque

La variable lOsError s’applique uniquement aux objets et CStdioFile aux CFile objets. La CMemFile classe ne gère pas ce code d’erreur.

CFileException::ErrnoToException

Convertit une valeur d’erreur de bibliothèque d’exécution donnée en valeur d’erreur CFileException énumérée.

static int PASCAL ErrnoToException(int nErrno);

Paramètres

nErrno
Code d’erreur entier tel que défini dans le fichier ERRNO.Hinclude au moment de l’exécution.

Valeur de retour

Valeur énumérée qui correspond à une valeur d’erreur de bibliothèque d’exécution donnée.

Notes

Consultez CFileException::m_cause la liste des valeurs énumérées possibles.

Exemple

ASSERT(CFileException::ErrnoToException(EACCES) == 
   CFileException::accessDenied);

CFileException::GetErrorMessage

Récupère du texte qui décrit une exception.

virtual BOOL GetErrorMessage(
    LPTSTR lpszError,
    UINT nMaxError,
    PUINT pnHelpContext = NULL) const;

Paramètres

lpszError
[in, out] Pointeur vers une mémoire tampon qui reçoit un message d’erreur.

nMaxError
[in] Nombre maximal de caractères que la mémoire tampon spécifiée peut contenir. Cela inclut le caractère de NULL fin.

pnHelpContext
[in, out] Pointeur vers un entier non signé qui reçoit l’ID de contexte d’aide. Si NULL, aucun ID n’est retourné.

Valeur de retour

TRUE si la méthode a réussi ; sinon FALSE.

Notes

Si la mémoire tampon spécifiée est trop petite, le message d’erreur est tronqué.

Exemple

L'exemple suivant utilise 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

Contient des valeurs définies par un type énuméré CFileException.

int m_cause;

Notes

Ce membre de données est une variable publique de type int. Voici les énumérateurs et leurs significations :

Erreur Valeur et signification
CFileException::none 0 : Aucune erreur n’a eu lieu.
CFileException::genericException 1 : Une erreur non spécifiée s’est produite.
CFileException::fileNotFound 2 : Impossible de trouver le fichier.
CFileException::badPath 3 : Tout ou partie du chemin d’accès n’est pas valide.
CFileException::tooManyOpenFiles 4 : Le nombre autorisé de fichiers ouverts a été dépassé.
CFileException::accessDenied 5 : Impossible d’accéder au fichier.
CFileException::invalidFile 6 : Une tentative d’utilisation d’un handle de fichier non valide a été effectuée.
CFileException::removeCurrentDir 7 : Impossible de supprimer le répertoire de travail actuel.
CFileException::directoryFull 8 : Il n’y a plus d’entrées d’annuaire.
CFileException::badSeek 9 : Une erreur s’est produite lors de la tentative de définition du pointeur de fichier.
CFileException::hardIO 10 : Une erreur matérielle s’est produite.
CFileException::sharingViolation 11 : SHARE.EXE n’a pas été chargé ou une région partagée a été verrouillée.
CFileException::lockViolation 12 : Il y a eu une tentative de verrouillage d’une région déjà verrouillée.
CFileException::diskFull 13 : Le disque est plein.
CFileException::endOfFile 14 : La fin du fichier a été atteinte.

Remarque

Ces énumérateurs de cause CFileException sont distincts des énumérateurs de cause CArchiveException.

Remarque

CArchiveException::generic est déconseillé. Utilisez genericException à la place. Si generic elle est utilisée dans une application et générée avec /clr, les erreurs de syntaxe résultantes ne sont pas faciles à déchiffrer.

Exemple

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

Contient le code d’erreur du système d’exploitation pour cette exception.

LONG m_lOsError;

Notes

Consultez le manuel technique de votre système d’exploitation pour obtenir la liste des codes d’erreur. Ce membre de données est une variable publique de type LONG.

CFileException::m_strFileName

Contient le nom du fichier pour cette condition d’exception.

CString m_strFileName;

CFileException::OsErrorToException

Retourne un énumérateur qui correspond à une valeur donnée lOsError . Si le code d’erreur est inconnu, la fonction retourne CFileException::generic.

static int PASCAL OsErrorToException(LONG lOsError);

Paramètres

lOsError
Code d’erreur spécifique au système d’exploitation.

Valeur de retour

Valeur énumérée qui correspond à une valeur d’erreur de système d’exploitation donnée.

Exemple

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

CFileException::ThrowErrno

Construit un CFileException objet correspondant à une valeur donnée nErrno , puis lève l’exception.

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

Paramètres

nErrno
Code d’erreur entier tel que défini dans le fichier ERRNO.Hinclude au moment de l’exécution.

lpszFileName
Pointeur vers la chaîne contenant le nom du fichier qui a provoqué l’exception, le cas échéant.

Exemple

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

CFileException::ThrowOsError

Lève une CFileException valeur correspondante à une valeur donnée lOsError . Si le code d’erreur est inconnu, la fonction lève une exception codée en tant que CFileException::generic.

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

Paramètres

lOsError
Code d’erreur spécifique au système d’exploitation.

lpszFileName
Pointeur vers la chaîne contenant le nom du fichier qui a provoqué l’exception, le cas échéant.

Exemple

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

Voir aussi

CException Classe
Graphique hiérarchique
Traitement des exceptions