Compartir a través de


Clase CFileException

Representa una condición de excepción relacionada con archivo.

Sintaxis

class CFileException : public CException

Miembros

Constructores públicos

Nombre Descripción
CFileException::CFileException Construye un objeto CFileException.

Métodos públicos

Nombre Descripción
CFileException::ErrnoToException Devuelve el código de causa correspondiente a un número de error en tiempo de ejecución.
CFileException::GetErrorMessage Recupera el mensaje que describe una excepción.
CFileException::OsErrorToException Devuelve un código de causa correspondiente a un código de error del sistema operativo.
CFileException::ThrowErrno Produce una excepción de archivo basada en un número de error en tiempo de ejecución.
CFileException::ThrowOsError Produce una excepción de archivo basada en un número de error del sistema operativo.

Miembros de datos públicos

Nombre Descripción
CFileException::m_cause Contiene código portátil correspondiente a la causa de la excepción.
CFileException::m_lOsError Contiene el número de error del sistema operativo relacionado.
CFileException::m_strFileName Contiene el nombre del archivo para esta excepción.

Comentarios

La clase CFileException incluye miembros de datos públicos que contienen el código de causa portátil y el número de error específico del sistema operativo. La clase también proporciona funciones miembro estáticas para iniciar excepciones de archivo y para devolver códigos de causa para errores del sistema operativo y errores en tiempo de ejecución de C.

CFileException Los objetos se construyen e inician en CFile funciones miembro y en funciones miembro de clases derivadas. Se puede acceder a estos objetos dentro del ámbito de una expresión CATCH. Para la portabilidad, usa solo el código de causa para obtener el motivo de una excepción. Para obtener más información sobre las excepciones, consulta el artículo Manejar Excepciones(MFC).

Jerarquía de herencia

CObject

CException

CFileException

Requisitos

Encabezadoafx.h:

CFileException::CFileException

Construye un objeto CFileException que almacena el código de causa y el código del sistema operativo en el objeto.

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

Parámetros

cause
Una variable de tipo enumerado que indica el motivo de la excepción. Consulta CFileException::m_cause para obtener una lista de posibles valores.

lOsError
Un motivo específico del sistema operativo para la excepción, si está disponible. El lOsError parámetro proporciona más información de lo que cause hace.

lpszArchiveName
Apunta a una cadena que contiene el nombre del objeto CFile que provoca la excepción.

Comentarios

No utilices este constructor directamente; en su lugar, llama a la función global AfxThrowFileException.

Nota:

La variable lOsError solo se aplica a los objetos CFile y CStdioFile. La clase CMemFile no controla este código de error.

CFileException::ErrnoToException

Convierte un valor de error de biblioteca en tiempo de ejecución determinado en un CFileException valor de error enumerado.

static int PASCAL ErrnoToException(int nErrno);

Parámetros

nErrno
Código de error entero tal como se define en el archivo ERRNO.Hde inclusión en tiempo de ejecución.

Valor devuelto

Valor enumerado que corresponde a un valor de error de biblioteca en tiempo de ejecución determinado.

Comentarios

Consulta CFileException::m_cause para obtener una lista de los posibles valores enumerados.

Ejemplo

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

CFileException::GetErrorMessage

Recupera texto que describe una excepción.

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

Parámetros

lpszError
[in, out] Puntero que apunta a un búfer que recibe un mensaje de error.

nMaxError
[in] El número máximo de caracteres que puede contener la estructura. Esto incluye el carácter NULL de terminación.

pnHelpContext
[in, out] Puntero a un entero sin signo que recibe el identificador de contexto de ayuda. Si NULL, no se devuelve ningún identificador.

Valor devuelto

si el método es correcto; TRUE, en caso contrario, FALSE.

Comentarios

Si el búfer especificado es demasiado pequeño, se trunca el mensaje de error.

Ejemplo

En el ejemplo siguiente se utiliza 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

Contiene los valores definidos por un tipo enumerado CFileException.

int m_cause;

Comentarios

Este miembro de datos es una variable pública de tipo int. A continuación se indican los enumeradores y el significado de cada uno de ellos:

Error Valor y significado
CFileException::none 0: No se produjo ningún error.
CFileException::genericException 1: Error no especificado.
CFileException::fileNotFound 2: No se pudo encontrar el archivo.
CFileException::badPath 3: Todo o parte de la ruta de acceso no es válido.
CFileException::tooManyOpenFiles 4: Se superó el número permitido de archivos abiertos.
CFileException::accessDenied 5: No se pudo acceder al archivo.
CFileException::invalidFile 6: Se intentó usar un identificador de archivo no válido.
CFileException::removeCurrentDir 7: No se puede quitar el directorio de trabajo actual.
CFileException::directoryFull 8: No hay más entradas de directorio.
CFileException::badSeek 9: Error al intentar establecer el puntero de archivo.
CFileException::hardIO 10: Error de hardware.
CFileException::sharingViolation 11: SHARE.EXE no se cargó o se bloqueó una región compartida.
CFileException::lockViolation 12: Se intentó bloquear una región que ya estaba bloqueada.
CFileException::diskFull 13: El disco está completo.
CFileException::endOfFile 14: se alcanzó el final del fichero.

Nota:

Estos enumeradores de causa de CFileException son distintos de los enumeradores de causa de CArchiveException.

Nota:

CArchiveException::generic está en desuso. En su lugar, use genericException. Si generic se usa en una aplicación y se crea con /clr, los errores de sintaxis resultantes no serán fáciles de descifrar.

Ejemplo

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

Contiene el código de error del sistema operativo para esta excepción.

LONG m_lOsError;

Comentarios

Consulte el manual técnico de su sistema operativo para obtener una lista de códigos de error. Este miembro de datos es una variable pública de tipo LONG.

CFileException::m_strFileName

Contiene el nombre del archivo para esta condición de excepción.

CString m_strFileName;

CFileException::OsErrorToException

Devuelve un enumerador que corresponde a un valor determinado lOsError. Si el código de error es desconocido, la función devuelve CFileException::generic.

static int PASCAL OsErrorToException(LONG lOsError);

Parámetros

lOsError
Código de error específico del sistema operativo.

Valor devuelto

Valor enumerado que corresponde a un valor de error del sistema operativo determinado.

Ejemplo

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

CFileException::ThrowErrno

Construye un objeto CFileException correspondiente a un valor determinado nErrno y, a continuación, produce la excepción.

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

Parámetros

nErrno
Código de error entero tal como se define en el archivo ERRNO.Hde inclusión en tiempo de ejecución.

lpszFileName
Un puntero a una cadena que contiene el nombre del archivo que provocó la excepción (si está disponible).

Ejemplo

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

CFileException::ThrowOsError

Produce un CFileException objeto correspondiente a un valor determinado lOsError. Si el código de error es desconocido, la función genera una excepción codificada como CFileException::generic.

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

Parámetros

lOsError
Código de error específico del sistema operativo.

lpszFileName
Un puntero a una cadena que contiene el nombre del archivo que provocó la excepción (si está disponible).

Ejemplo

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

Consulte también

CException (clase)
Gráfico de jerarquías
Procesamiento de excepciones