Condividi tramite


CFile::Open

Di overload.Apri è progettato per l'utilizzo con il costruttore predefinito CFile.

virtual BOOL Open(
   LPCTSTR lpszFileName,
   UINT nOpenFlags,
   CFileException* pError = NULL 
);
virtual BOOL Open(
   LPCTSTR lpszFileName,
   UINT nOpenFlags,
   CAtlTransactionManager* pTM,
   CFileException* pError = NULL
);

Parametri

  • lpszFileName
    Stringa che rappresenta il percorso del file desiderato.Il percorso può essere relativo, assoluto, o un nome di rete (UNC).

  • nOpenFlags
    uint Che definisce la condivisione e la modalità di accesso al file.Specifica l'azione da eseguire quando viene aperto il file.È possibile combinare le opzioni utilizzando bit per bit (OR**|**Operatore).Un'autorizzazione di accesso e un'opzione di condivisione sono necessarie; le modalità modeNoInherit e modeCreate sono facoltative.Vedere il costruttore file C per un elenco di opzioni di sistema.

  • pError
    Un puntatore a un oggetto esistente di eccezione di file che riceverà lo stato di un'operazione non riuscita.

  • pTM
    Puntatore all'oggetto di CAtlTransactionManager

Valore restituito

Diverso da zero se il comando apri è riuscita, in caso contrario 0.Il parametro pError è significativo solo se 0 viene restituito.

Note

Le due funzioni costituiscono un metodo "sicuro" per aprire un file in cui un errore è uno stato normale e previsto.

Mentre il costruttore CFile genererà un'eccezione in una condizione di errore, Apri restituirà FALSE per le condizioni di errore.Apri può comunque inizializzare un oggetto CFileException per descrivere l'errore, tuttavia.Se non si fornisce il parametro pError, o se si passa NULL per pError, Apri restituirà FALSE e non genererà CFileException.Se si passa un puntatore a CFileExceptionesistente e rileva Apri un errore, la funzione lo riempie di informazioni relative all'errore.In nessuno dei due caso la generazione Apri un'eccezione.

La tabella seguente vengono descritti i risultati possibili Apri.

pError

Errore rilevato?

Valore restituito

Contenuto di CFileException

NULL

No

TRUE

n/d

stampante a CFileException

No

TRUE

invariato

NULL

FALSE

n/d

stampante a CFileException

FALSE

inizializzato per descrivere errore

Esempio

CFile f;
CFileException e;
TCHAR* pszFileName = _T("Open_File.dat");
if(!f.Open(pszFileName, CFile::modeCreate | CFile::modeWrite, &e))
{
   TRACE(_T("File could not be opened %d\n"), e.m_cause);
}
//A second example for CFile::Open.
//This function uses CFile to copy binary files.
bool BinaryFileCopy(LPCTSTR pszSource, LPCTSTR pszDest)
{
   // constructing these file objects doesn't open them
   CFile sourceFile;
   CFile destFile;

   // we'll use a CFileException object to get error information
   CFileException ex;

   // open the source file for reading
   if (!sourceFile.Open(pszSource,
      CFile::modeRead | CFile::shareDenyWrite, &ex))
   {
      // complain if an error happened
      // no need to delete the ex object

      TCHAR szError[1024];
      ex.GetErrorMessage(szError, 1024);
      _tprintf_s(_T("Couldn't open source file: %1024s"), szError);
      return false;
   }
   else
   {
      if (!destFile.Open(pszDest, CFile::modeWrite |
         CFile::shareExclusive | CFile::modeCreate, &ex))
      {
         TCHAR szError[1024];
         ex.GetErrorMessage(szError, 1024);
         _tprintf_s(_T("Couldn't open source file: %1024s"), szError);

         sourceFile.Close();
         return false;
      }

      BYTE buffer[4096];
      DWORD dwRead;

      // Read in 4096-byte blocks,
      // remember how many bytes were actually read,
      // and try to write that many out. This loop ends
      // when there are no more bytes to read.
      do
      {
         dwRead = sourceFile.Read(buffer, 4096);
         destFile.Write(buffer, dwRead);
      }
      while (dwRead > 0);

      // Close both files

      destFile.Close();
      sourceFile.Close();
   }

   return true;
}

Requisiti

Header: afx.h

Vedere anche

Riferimenti

Classe del file C

Grafico della gerarchia

CFile::CFile

CFile::Close