Partilhar via


CFileException Classe

Observação

A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Representa uma condição de exceção relacionada com ficheiros.

Sintaxe

class CFileException : public CException

Membros

Construtores Públicos

Nome Description
CFileException::CFileException Constrói um CFileException objeto.

Métodos Públicos

Nome Description
CFileException::ErrnoToException Devolve o código de causa correspondente a um número de erro em tempo de execução.
CFileException::GetErrorMessage Recupera a mensagem que descreve uma exceção.
CFileException::OsErrorToException Devolve um código de causa correspondente a um código de erro do sistema operativo.
CFileException::ThrowErrno Lança uma exceção de ficheiro baseada num número de erro em tempo de execução.
CFileException::ThrowOsError Lança uma exceção de ficheiro baseada num número de erro do sistema operativo.

Membros de Dados Públicos

Nome Description
CFileException::m_cause Contém código portátil correspondente à causa da exceção.
CFileException::m_lOsError Contém o número de erro do sistema operativo relacionado.
CFileException::m_strFileName Contém o nome do ficheiro desta exceção.

Observações

A CFileException classe inclui membros de dados públicos que detêm o código de causa portátil e o número de erro específico do sistema operativo. A classe também fornece funções estáticas para lançar exceções de ficheiros e para devolver códigos de causa tanto para erros do sistema operativo como para erros em tempo de execução C.

CFileException os objetos são construídos e colocados em CFile funções membros e em funções membros de classes derivadas. Pode aceder a estes objetos dentro do âmbito de uma CATCH expressão. Para portabilidade, use apenas o código de causa para obter o motivo de uma exceção. Para mais informações sobre exceções, consulte o artigo Tratamento de Exceções (MFC).

Hierarquia de herança

CObject

CException

CFileException

Requerimentos

Cabeçalho:afx.h

CFileException::CFileException

Constrói um CFileException objeto que armazena o código de causa e o código do sistema operativo no objeto.

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

Parâmetros

cause
Uma variável de tipo enumerada que indica a razão da exceção. Consulte CFileException::m_cause uma lista dos valores possíveis.

lOsError
Uma razão específica do sistema operativo para a exceção, se disponível. O lOsError parâmetro fornece mais informação do que cause realmente fornece.

lpszArchiveName
Aponta para uma cadeia que contém o nome do CFile objeto que causa a exceção.

Observações

Não use este construtor diretamente, mas sim chame à função AfxThrowFileExceptionglobal .

Observação

A variável lOsError aplica-se apenas a CFile e CStdioFile objetos. A CMemFile classe não gere este código de erro.

CFileException::ErrnoToException

Converte um dado valor de erro da biblioteca em tempo de execução num CFileException valor de erro enumerado.

static int PASCAL ErrnoToException(int nErrno);

Parâmetros

nErrno
Um código de erro inteiro definido no ficheiro ERRNO.Hinclude em tempo de execução .

Valor de retorno

Valor enumerado que corresponde a um dado valor de erro de biblioteca em tempo de execução.

Observações

Veja CFileException::m_cause uma lista dos possíveis valores enumerados.

Example

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

CFileException::GetErrorMessage

Recupera texto que descreve uma exceção.

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

Parâmetros

lpszError
[inspira, expira] Apontar para um buffer que recebe uma mensagem de erro.

nMaxError
[dentro] O número máximo de caracteres que o buffer especificado pode conter. Isto inclui o carácter de NULL terminação.

pnHelpContext
[inspira, expira] Apontador para um inteiro sem sinal que recebe o ID do contexto de ajuda. Se NULL, não é devolvido nenhum documento de identificação.

Valor de retorno

TRUE se o método fosse bem-sucedido; caso contrário FALSE.

Observações

Se o buffer especificado for demasiado pequeno, a mensagem de erro é truncada.

Example

O exemplo a seguir usa 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

Contém valores definidos por um CFileException tipo enumerado.

int m_cause;

Observações

Este membro de dados é uma variável pública do tipo int. Os enumeradores e os seus significados são os seguintes:

Erro Valor e significado
CFileException::none 0: Não houve erro.
CFileException::genericException 1: Ocorreu um erro não especificado.
CFileException::fileNotFound 2: O ficheiro não foi localizado.
CFileException::badPath 3: Todo ou parte do caminho é inválido.
CFileException::tooManyOpenFiles 4: O número permitido de ficheiros abertos foi ultrapassado.
CFileException::accessDenied 5: O ficheiro não pôde ser acedido.
CFileException::invalidFile 6: Houve uma tentativa de usar um endereço de ficheiro inválido.
CFileException::removeCurrentDir 7: O diretório de trabalho atual não pode ser removido.
CFileException::directoryFull 8: Não há mais entradas no diretório.
CFileException::badSeek 9: Houve um erro ao tentar definir o ponteiro do ficheiro.
CFileException::hardIO 10: Houve um erro de hardware.
CFileException::sharingViolation 11: SHARE.EXE não estava carregado, ou uma região partilhada estava bloqueada.
CFileException::lockViolation 12: Houve uma tentativa de bloquear uma região que já estava bloqueada.
CFileException::diskFull 13: O disco está cheio.
CFileException::endOfFile 14: O fim do processo foi alcançado.

Observação

Estes CFileException enumeradores de causa são distintos dos CArchiveException enumeradores de causas.

Observação

CArchiveException::generic está obsoleto. Utilize genericException em substituição. Se generic for usado numa aplicação e construído com /clr, os erros de sintaxe resultantes não são fáceis de decifrar.

Example

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

Contém o código de erro do sistema operativo para esta exceção.

LONG m_lOsError;

Observações

Consulte o manual técnico do seu sistema operativo para uma lista de códigos de erro. Este membro de dados é uma variável pública do tipo LONG.

CFileException::m_strFileName

Contém o nome do ficheiro para esta condição de exceção.

CString m_strFileName;

CFileException::OsErrorToException

Devolve um enumerador que corresponde a um determinado lOsError valor. Se o código de erro for desconhecido, então a função devolve CFileException::generic.

static int PASCAL OsErrorToException(LONG lOsError);

Parâmetros

lOsError
Um código de erro específico do sistema operativo.

Valor de retorno

Valor enumerado que corresponde a um dado valor de erro do sistema operativo.

Example

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

CFileException::ThrowErrno

Constrói um CFileException objeto correspondente a um determinado nErrno valor, depois lança a exceção.

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

Parâmetros

nErrno
Um código de erro inteiro definido no ficheiro ERRNO.Hinclude em tempo de execução .

lpszFileName
Um ponteiro para a string que contém o nome do ficheiro que causou a exceção, se disponível.

Example

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

CFileException::ThrowOsError

Lança um CFileException correspondente a um dado lOsError valor. Se o código de erro for desconhecido, então a função gera uma exceção codificada como CFileException::generic.

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

Parâmetros

lOsError
Um código de erro específico do sistema operativo.

lpszFileName
Um ponteiro para a string que contém o nome do ficheiro que causou a exceção, se disponível.

Example

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

Consulte também

CException Classe
Gráfico de Hierarquia
Processamento de Exceções