CFile::Open
Перегружен.Открыть предназначен для использования с конструктором CFile по умолчанию.
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CFileException* pError = NULL
);
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM,
CFileException* pError = NULL
);
Параметры
lpszFileName
Строка, путь к требуемому файлу.Путь может быть относительным, либо абсолютным, сетевые имена UNC.nOpenFlags
UINT, Указывающее режим общего доступа и доступа к файлу.Оно определяет действие, выполняемое при открытии файла.Можно комбинировать параметры с помощью битовый- ИЛИ (|) оператор.Одно разрешение на доступ и один параметр общей папки необходимы; режимы modeCreate и modeNoInherit являются необязательными.См. раздел конструктор CFile для просмотра списка параметров.pError
Указатель на существующий объект файл- исключения, который получит состояние "Завершившаяся ошибкой операция".pTM
Указатель на объект CAtlTransactionManager
Возвращаемое значение
Ненулевой если открыть был успешным; в противном случае – значение 0.Параметр pError может применяться только если возвращается значение 0.
Заметки
2 Формируют" функции "установить безопасный метод для открытия файла, в котором сбой обычный, ожидаемое состояние.
Пока конструктор CFile вызовет исключение в условии ошибки, Открыть возвращает FALSE для условий ошибки.Открыть все равно может инициализировать объект CFileException для описания ошибки.Если не указывать параметр pError или если передается NULL для pError, то Открыть возвращает FALSE и не вызовет CFileException.Если передать указатель к существующему CFileException и встречи Открыть ошибка, то функция заполняет его со сведениями, описывающий эту ошибку.В случае работы Открыть поскольку отсутствует исключение.
В следующей таблице показаны возможные результаты Открыть.
pError |
Обнаружена ошибка? |
Возвращаемое значение |
Содержимое CFileException |
---|---|---|---|
NULL |
Нет |
TRUE |
нет |
ptr к CFileException |
Нет |
TRUE |
без изменений |
NULL |
Да |
FALSE |
нет |
ptr к CFileException |
Да |
FALSE |
инициализированный для описания ошибки |
Пример
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;
}
Требования
Header: afx.h