Compartir a través de


CFile::Open

Sobrecargado. Abrir está diseñado para el constructor predeterminado de CFile .

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

Parámetros

  • lpszFileName
    Una cadena que es la ruta de acceso al archivo deseado. La ruta de acceso puede ser relativa, absoluto, o un nombre de red (UNC.

  • nOpenFlags
    UINT que define el uso compartido y el modo de acceso de archivo. Especifica la acción que se va a realizar al abrir el archivo. Puede combinar opciones mediante OR bit a bit ( |) operador. se requieren un permiso de acceso y una opción de acción; los modos de modeCreate y de modeNoInherit son opcionales. Vea el constructor de Archivo C para una lista de opciones de modo.

  • pError
    Un puntero a un objeto existente de la archivo-excepción que recibirá el estado de una operación con errores.

  • pTM
    Puntero al objeto de CAtlTransactionManager

Valor devuelto

Distinto de cero si el abierto fue correcto; si no 0. El parámetro de pError es significativo únicamente si se devuelve 0.

Comentarios

Las dos funciones forman un método “seguro” para abrir un archivo donde es una condición un error normal, esperada.

Mientras el constructor de CFile producirá una excepción en una condición de error, Abrir devolverá FALSO para las condiciones de error. Abrir todavía puede inicializar un objeto de CFileException para describir el error, sin embargo. Si no se proporciona el parámetro de pError , o si se pasa NULL para pError, Abrir devolverá FALSO y no producirá CFileException. Si pasa un puntero a CFileExceptionexistente, y Abrir encuentra un error, la función se rellenará con información que describe el error. En ningún caso captura de Abrir una excepción.

La tabla siguiente describe los posibles resultados de Abrir.

pError

¿Error encontrado?

Valor devuelto

contenido de CFileException

NULL

No

TRUE

no disponible

PTR a CFileException

No

TRUE

sin cambios

NULL

FALSE

no disponible

PTR a CFileException

FALSE

inicializado para describir error

Ejemplo

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;
}

Requisitos

encabezado: afx.h

Vea también

Referencia

CFile Class

Gráfico de jerarquías

CFile::CFile

CFile::Close