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 |
Sí |
FALSE |
no disponible |
PTR a CFileException |
Sí |
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