Condividi tramite


Classe CFileException

Rappresenta una condizione di eccezione correlata al file.

Sintassi

class CFileException : public CException

Membri

Costruttori pubblici

Nome Descrizione
CFileException::CFileException Costruisce un oggetto CFileException.

Metodi pubblici

Nome Descrizione
CFileException::ErrnoToException Restituisce il codice di causa corrispondente a un numero di errore di run-time.
CFileException::GetErrorMessage Recupera il messaggio che descrive un'eccezione.
CFileException::OsErrorToException Restituisce un codice di causa corrispondente a un codice di errore del sistema operativo.
CFileException::ThrowErrno Genera un'eccezione di file in base a un numero di errore di runtime.
CFileException::ThrowOsError Genera un'eccezione di file in base a un numero di errore del sistema operativo.

Membri dati pubblici

Nome Descrizione
CFileException::m_cause Contiene codice portabile corrispondente alla causa dell'eccezione.
CFileException::m_lOsError Contiene il numero di errore del sistema operativo correlato.
CFileException::m_strFileName Contiene il nome del file per questa eccezione.

Osservazioni:

La CFileException classe include membri dati pubblici che contengono il codice di causa portabile e il numero di errore specifico del sistema operativo. La classe fornisce anche funzioni membro statiche per generare eccezioni di file e per la restituzione di codici di causa sia per gli errori del sistema operativo che per gli errori di runtime C.

CFileException gli oggetti vengono costruiti e generati nelle CFile funzioni membro e nelle funzioni membro delle classi derivate. È possibile accedere a questi oggetti all'interno dell'ambito di un'espressione CATCH . Per la portabilità, usare solo il codice di causa per ottenere il motivo di un'eccezione. Per altre informazioni sulle eccezioni, vedere l'articolo Gestione delle eccezioni (MFC).

Gerarchia di ereditarietà

CObject

CException

CFileException

Requisiti

Intestazione: afx.h

CFileException::CFileException

Costruisce un CFileException oggetto che archivia il codice della causa e il codice del sistema operativo nell'oggetto .

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

Parametri

cause
Variabile di tipo enumerato che indica il motivo dell'eccezione. Vedere CFileException::m_cause per un elenco dei valori possibili.

lOsError
Motivo specifico del sistema operativo per l'eccezione, se disponibile. Il lOsError parametro fornisce più informazioni di quanto cause non lo sia.

lpszArchiveName
Punta a una stringa contenente il nome dell'oggetto CFile che causa l'eccezione.

Osservazioni:

Non usare direttamente questo costruttore, ma chiamare la funzione AfxThrowFileExceptionglobale .

Nota

La variabile lOsError si applica solo agli CFile oggetti e CStdioFile . La CMemFile classe non gestisce questo codice di errore.

CFileException::ErrnoToException

Converte un determinato valore di errore della libreria di runtime in un CFileException valore di errore enumerato.

static int PASCAL ErrnoToException(int nErrno);

Parametri

nErrno
Codice di errore integer definito nel file ERRNO.Hdi inclusione in fase di esecuzione.

Valore restituito

Valore enumerato che corrisponde a un determinato valore di errore della libreria di runtime.

Osservazioni:

Vedere CFileException::m_cause per un elenco dei possibili valori enumerati.

Esempio

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

CFileException::GetErrorMessage

Recupera il testo che descrive un'eccezione.

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

Parametri

lpszError
[in, out] Puntatore a un buffer che riceve un messaggio di errore.

nMaxError
[in] Numero massimo di caratteri che il buffer specificato può contenere. Include il carattere di terminazione NULL .

pnHelpContext
[in, out] Puntatore a un intero senza segno che riceve l'ID contesto della Guida. Se NULL, non viene restituito alcun ID.

Valore restituito

TRUE se il metodo ha avuto esito positivo; in caso contrario FALSE, .

Osservazioni:

Se il buffer specificato è troppo piccolo, il messaggio di errore viene troncato.

Esempio

Nell'esempio seguente viene utilizzato 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 valori definiti da un tipo enumerato CFileException.

int m_cause;

Osservazioni:

Questo membro dati è una variabile pubblica di tipo int. Di seguito sono elencati gli enumeratori e i relativi significati:

Error Valore e significato
CFileException::none 0: Non si è verificato alcun errore.
CFileException::genericException 1: Si è verificato un errore non specificato.
CFileException::fileNotFound 2: Impossibile trovare il file.
CFileException::badPath 3: Tutto o parte del percorso non è valido.
CFileException::tooManyOpenFiles 4: è stato superato il numero consentito di file aperti.
CFileException::accessDenied 5: Impossibile accedere al file.
CFileException::invalidFile 6: Si è tentato di usare un handle di file non valido.
CFileException::removeCurrentDir 7: La directory di lavoro corrente non può essere rimossa.
CFileException::directoryFull 8: Non ci sono più voci di directory.
CFileException::badSeek 9: Si è verificato un errore durante il tentativo di impostare il puntatore al file.
CFileException::hardIO 10: Si è verificato un errore hardware.
CFileException::sharingViolation 11: SHARE.EXE non è stato caricato o un'area condivisa è stata bloccata.
CFileException::lockViolation 12: Si è tentato di bloccare un'area già bloccata.
CFileException::diskFull 13: Il disco è pieno.
CFileException::endOfFile 14: è stata raggiunta la fine del file.

Nota

Questi enumeratori di causa CFileException sono diversi dagli enumeratori di causa CArchiveException.

Nota

CArchiveException::generic è stato deprecato. Utilizzare invece genericException. Se generic viene usato in un'applicazione e compilato con /clr, gli errori di sintassi risultanti non sono facili da decifrare.

Esempio

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 il codice di errore del sistema operativo per questa eccezione.

LONG m_lOsError;

Osservazioni:

Per un elenco dei codici di errore, vedere il manuale tecnico del sistema operativo. Questo membro dati è una variabile pubblica di tipo LONG.

CFileException::m_strFileName

Contiene il nome del file per questa condizione di eccezione.

CString m_strFileName;

CFileException::OsErrorToException

Restituisce un enumeratore che corrisponde a un valore specificato lOsError . Se il codice di errore è sconosciuto, la funzione restituisce CFileException::generic.

static int PASCAL OsErrorToException(LONG lOsError);

Parametri

lOsError
Codice di errore specifico del sistema operativo.

Valore restituito

Valore enumerato che corrisponde a un determinato valore di errore del sistema operativo.

Esempio

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

CFileException::ThrowErrno

Costruisce un CFileException oggetto corrispondente a un determinato nErrno valore, quindi genera l'eccezione.

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

Parametri

nErrno
Codice di errore integer definito nel file ERRNO.Hdi inclusione in fase di esecuzione.

lpszFileName
Puntatore alla stringa contenente il nome del file che ha causato l'eccezione, se disponibile.

Esempio

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

CFileException::ThrowOsError

Genera un oggetto CFileException corrispondente a un determinato lOsError valore. Se il codice di errore è sconosciuto, la funzione genera un'eccezione codificata come CFileException::generic.

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

Parametri

lOsError
Codice di errore specifico del sistema operativo.

lpszFileName
Puntatore alla stringa contenente il nome del file che ha causato l'eccezione, se disponibile.

Esempio

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

Vedi anche

CException Classe
Grafico della gerarchia
Elaborazione delle eccezioni