Поделиться через


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

См. также

Ссылки

Класс CFile

Диаграмма иерархии

CFile::CFile

CFile::Close