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


Класс CFile

Базовый класс для файловых классов Microsoft Foundation Class.

Синтаксис

class CFile : public CObject

Участники

Открытые конструкторы

Имя Описание
CFile::CFile CFile Создает объект из дескриптора пути или файла.

Открытые методы

Имя Описание
CFile::Abort Закрывает файл, игнорируя все предупреждения и ошибки.
CFile::Close Закрывает файл и удаляет объект.
CFile::D uplicate Создает повторяющийся объект на основе этого файла.
CFile::Flush Очищает все данные, которые еще не записываются.
CFile::GetFileName Извлекает имя файла выбранного файла.
CFile::GetFilePath Получает полный путь к файлу выбранного файла.
CFile::GetFileTitle Извлекает заголовок выбранного файла.
CFile::GetLength Извлекает длину файла.
CFile::GetPosition Извлекает текущий указатель на файл.
CFile::GetStatus Извлекает состояние открытого файла или в статической версии получает состояние указанного файла (статическую, виртуальную функцию).
CFile::LockRange Блокирует диапазон байтов в файле.
CFile::Open Безопасно открывает файл с параметром проверки ошибок.
CFile::Read Считывает (небуферированные) данные из файла в текущей позиции файла.
CFile::Remove Удаляет указанный файл (статическую функцию).
CFile::Rename Переименовывает указанный файл (статическую функцию).
CFile::Seek Позиционирует текущий указатель на файл.
CFile::SeekToBegin Позиционирует текущий указатель на файл в начале файла.
CFile::SeekToEnd Помещает текущий указатель на файл в конце файла.
CFile::SetFilePath Задает полный путь к файлу выбранного файла.
CFile::SetLength Изменяет длину файла.
CFile::SetStatus Задает состояние указанного файла (статическая, виртуальная функция).
CFile::UnlockRange Разблокирует диапазон байтов в файле.
CFile::Write Записывает (небуферированные) данные в файл в текущую позицию файла.

Открытые операторы

Имя Описание
CFile::operator HANDLE Дескриптор CFile объекта.

Открытые члены данных

Имя Описание
CFile::hFileNull Определяет, имеет ли CFile объект допустимый дескриптор.
CFile::m_hFile Обычно содержит дескриптор файлов операционной системы.

Защищенные члены данных

Имя Описание
CFile::m_pTM Указатель на объект CAtlTransactionManager.

Замечания

Он напрямую предоставляет небуферированные, двоичные службы ввода и вывода диска, а также косвенно поддерживает текстовые файлы и файлы памяти через производные классы. CFile работает вместе с классом CArchive для поддержки сериализации объектов класса Microsoft Foundation.

Иерархическая связь между этим классом и производными классами позволяет программе работать со всеми файловыми объектами через полиморфный CFile интерфейс. Например, файл памяти работает как файл диска.

Используйте CFile и производные классы для операций ввода-вывода диска общего назначения. Используйте ofstream или другие классы Майкрософт iostream для отформатированного текста, отправленного в файл диска.

Как правило, файл диска открывается автоматически при CFile построении и закрыт при уничтожении. Статические функции-члены позволяют провести допрос состояния файла без открытия файла.

Дополнительные сведения об использовании CFileсм. в статьях "Файлы в MFC" и "Обработка файлов" в справочнике по библиотеке времени выполнения.

Иерархия наследования

CObject

CFile

Требования

Заголовок: afx.h

CFile::Abort

Закрывает файл, связанный с этим объектом, и делает файл недоступным для чтения или записи.

virtual void Abort();

Замечания

Если вы еще не закрыли файл перед уничтожением объекта, деструктор закрывает его для вас.

При обработке исключений CFile::Abort отличается от CFile::Close двух важных способов. Во-первых, Abort функция не создает исключение при сбоях, так как ошибки игнорируются Abort. Во-вторых, не будет УТВЕРЖДАТЬся, Abort если файл не был открыт или был закрыт ранее.

Если вы использовали new для выделения CFile объекта в куче, его необходимо удалить после закрытия файла. Abort задает значение m_hFile CFile::hFileNull.

Пример

CStdioFile fileTest;
TCHAR* pszFileName = _T("Abort_File.dat");

// do stuff that may cause exceptions
CFileException ex;
if (!fileTest.Open(pszFileName, CFile::modeWrite, &ex))
{
   ex.ReportError();
   fileTest.Abort();   // close file safely and quietly
}

CFile::CFile

Создает и инициализирует объект CFile.

CFile();
CFile(CAtlTransactionManager* pTM);
CFile(HANDLE hFile);

CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags);

CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM);

Параметры

hFile
Дескриптор файла, который будет присоединен к объекту CFile.

lpszFileName
Относительный или полный путь к файлу, который будет присоединен к объекту CFile.

nOpenFlags
Побитовое сочетание (ИЛИ) параметров доступа к указанному файлу. Возможные параметры см. в разделе "Заметки".

pTM
Указатель на объект CAtlTransactionManager.

Замечания

В следующих пяти таблицах перечислены возможные параметры параметра nOpenFlags .

Выберите только один из следующих параметров режима доступа к файлу. Режим доступа к файлу по умолчанию — CFile::modeRead, т. е. только для чтения.

значение Описание
CFile::modeRead Запрашивает доступ только для чтения.
CFile::modeWrite Запрашивает доступ только для записи.
CFile::modeReadWrite Запрашивает доступ для чтения и записи.

Выберите один из следующих параметров режима символов.

значение Описание
CFile::typeBinary Задает двоичный режим (используется только в производных классах).
CFile::typeText Задает текстовый режим с специальной обработкой для пар канала возвращаемой строки каретки (используется только в производных классах).
CFile::typeUnicode Задает режим Юникода (используется только в производных классах). Текст записывается в файл в формате Юникод, если приложение использует конфигурацию Юникода. Данные BOM в файл не записываются.

Выберите только один из следующих параметров режима общего доступа к файлу. Режим общего доступа к файлу по умолчанию — CFile::shareExclusive, т. е. эксклюзивный доступ.

значение Описание
CFile::shareDenyNone Нет ограничений по общему доступу.
CFile::shareDenyRead Запрет доступа для чтения для всех других пользователей.
CFile::shareDenyWrite Запрет доступа для записи для всех других пользователей.
CFile::shareExclusive Запрет доступа для чтения и записи для всех других пользователей.

Выберите первый или и первый, и второй из следующих параметров режима создания файла. Режим создания по умолчанию — CFile::modeNoTruncate, т. е. открывается существующий файл.

значение Описание
CFile::modeCreate Создает новый файл, если файл отсутствует. Если файл уже существует, он перезаписывается и изначально имеет нулевую длину.
CFile::modeNoTruncate Создает новый файл, если файл отсутствует; В противном случае, если файл уже существует, он подключен к объекту CFile .

Выберите соответствующие параметры кэширования файлов, описанные далее. По умолчанию система использует схему кэширования общего назначения, которая недоступна в качестве параметра.

значение Описание
CFile::osNoBuffer Система не использует промежуточный кэш для файла. Этот параметр отменяет использование следующих двух параметров.
CFile::osRandomAccess Файловый кэш оптимизирован для случайного доступа. Не используйте этот параметр и параметр последовательной проверки.
CFile::osSequentialScan Файловый кэш оптимизирован для последовательного доступа. Не используйте этот параметр и случайный доступ.
CFile::osWriteThrough Операции записи выполняются без задержки.

Выберите следующий параметр безопасности, чтобы дескриптор файла не наследовался. По умолчанию любые новые дочерние процессы могут использовать дескриптор файла.

значение Описание
CFile::modeNoInherit Запрещает дочерним процессам использовать дескриптор файла.

Конструктор по умолчанию инициализирует элементы, но не присоединяет файл к объекту CFile . После использования этого конструктора используйте метод CFile::Open , чтобы открыть файл и присоединить его к объекту CFile .

Конструктор с одним параметром инициализирует члены и присоединяет существующий файл к объекту CFile.

Конструктор с двумя параметрами инициализирует члены и пытается открыть указанный файл. Если конструктор успешно открывает заданный файл, он присоединяется к объекту CFile. В противном случае конструктор возвращает указатель на объект CInvalidArgException. Дополнительные сведения об обработке исключений см. в разделе "Исключения".

CFile Если объект успешно открывает указанный файл, он автоматически закрывает этот файл при CFile уничтожении объекта; в противном случае необходимо явно закрыть файл после того, как он больше не подключен к объектуCFile.

Пример

В следующем коде показано использование CFile.

HANDLE hFile = CreateFile(_T("CFile_File.dat"),
   GENERIC_WRITE, FILE_SHARE_READ,
   NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

if (hFile == INVALID_HANDLE_VALUE)
{
   AfxMessageBox(_T("Couldn't create the file!"));
}
else
{
   // Attach a CFile object to the handle we have.
   CFile myFile(hFile);

   static const TCHAR sz[] = _T("I love CFile!");

   // write string
   myFile.Write(sz, sizeof(sz));

   // We need to call Close() explicitly. Note that there's no need to 
   // call CloseHandle() on the handle returned by the API because 
   // Close() automatically calls CloseHandle() for us.
   myFile.Close();

CFile::Close

Закрывает файл, связанный с этим объектом, и делает файл недоступным для чтения или записи.

virtual void Close();

Замечания

Если вы еще не закрыли файл перед уничтожением объекта, деструктор закрывает его для вас.

Если вы использовали new для выделения CFile объекта в куче, его необходимо удалить после закрытия файла. Close задает значение m_hFile CFile::hFileNull.

Пример

См. пример CFile ::CFile.

CFile::D uplicate

Создает повторяющийся CFile объект для заданного файла.

virtual CFile* Duplicate() const;

Возвращаемое значение

Указатель на повторяющийся CFile объект.

Замечания

Эта функция эквивалентна функции _dupвремени выполнения C.

CFile::Flush

Принудительно записывает все данные, оставшиеся в буфере файла.

virtual void Flush();

Замечания

Использование Flush буферов не гарантирует очистку CArchive буферов. Если вы используете архив, сначала вызовите CArchive::Flush .

Пример

См. пример CFile::SetFilePath.

CFile::GetFileName

Вызовите эту функцию-член, чтобы получить имя указанного файла.

virtual CString GetFileName() const;

Возвращаемое значение

Имя файла.

Замечания

Например, при вызове GetFileName создания сообщения пользователю о файле возвращается имя файла, имя myfile.wriфайлаc:\windows\write\myfile.wri.

Чтобы вернуть весь путь к файлу, включая имя, вызовите GetFilePath. Чтобы вернуть заголовок файла (), myfileвызовите GetFileTitle.

Пример

Этот фрагмент кода открывает SYSTEM. INI-файл в каталоге WINDOWS. При обнаружении пример выводит имя и путь и заголовок, как показано в разделе "Выходные данные":

try
{
   // try to open the file
   CFile sysFile(_T("C:\\WINDOWS\\SYSTEM.INI"), CFile::modeRead);

   // print out path name and title information
   _tprintf_s(_T("Path is : \"%s\"\n"),
      (LPCTSTR) sysFile.GetFilePath());
   _tprintf_s(_T("Name is : \"%s\"\n"),
      (LPCTSTR) sysFile.GetFileName());
   _tprintf_s(_T("Title is: \"%s\"\n"), 
      (LPCTSTR) sysFile.GetFileTitle());

   // close the file handle
   sysFile.Close();
}
catch (CFileException* pEx)
{
   // if an error occurs, just make a message box
   pEx->ReportError();
   pEx->Delete();
}

CFile::GetFilePath

Вызовите эту функцию-член, чтобы получить полный путь к указанному файлу.

virtual CString GetFilePath() const;

Возвращаемое значение

Полный путь к указанному файлу.

Замечания

Например, при вызове GetFilePath для создания сообщения пользователю о файле возвращается путь c:\windows\write\myfile.wriк файлуc:\windows\write\myfile.wri.

Чтобы вернуть только имя файла (myfile.wri), вызовите GetFileName. Чтобы вернуть заголовок файла (myfile), вызовите Метод GetFileTitle.

Пример

См. пример getFileName.

CFile::GetFileTitle

Вызовите эту функцию-член, чтобы получить название файла (отображаемое имя) для файла.

virtual CString GetFileTitle() const;

Возвращаемое значение

Заголовок базового файла.

Замечания

Этот метод вызывает GetFileTitle , чтобы получить заголовок файла. При успешном выполнении метод возвращает строку, используемую системой для отображения имени файла пользователю. В противном случае метод вызывает PathFindFileName , чтобы получить имя файла (включая расширение файла) базового файла. Это означает, что расширение файла не всегда входит в возвращаемую строку заголовка файла. Дополнительные сведения см. в разделе GetFileTitle и PathFindFileName в пакете SDK для Windows.

Чтобы вернуть весь путь к файлу, включая имя, вызовите GetFilePath. Чтобы вернуть только имя файла, вызовите GetFileName.

Пример

См. пример getFileName.

CFile::GetLength

Получает текущую логическую длину файла в байтах.

virtual ULONGLONG GetLength() const;

Возвращаемое значение

Длина файла.

Пример

CFile* pFile = NULL;
// Constructing a CFile object with this override may throw
// a CFile exception, and won't throw any other exceptions.
// Calling CString::Format() may throw a CMemoryException,
// so we have a catch block for such exceptions, too. Any
// other exception types this function throws will be
// routed to the calling function.
try
{
   pFile = new CFile(_T("C:\\WINDOWS\\SYSTEM.INI"),
      CFile::modeRead | CFile::shareDenyNone);
   ULONGLONG dwLength = pFile->GetLength();
   CString str;
   str.Format(_T("Your SYSTEM.INI file is %I64u bytes long."), dwLength);
   AfxMessageBox(str);
}
catch (CFileException* pEx)
{
   // Simply show an error message to the user.
   pEx->ReportError();
   pEx->Delete();
}
catch(CMemoryException* pEx)
{
   pEx->ReportError();
   pEx->Delete();
   // We can't recover from this memory exception, so we'll
   // just terminate the app without any cleanup. Normally,
   // an application should do everything it possibly can to
   // clean up properly and _not_ call AfxAbort().
   AfxAbort();
}

// If an exception occurs in the CFile constructor,
// the language will free the memory allocated by new
// and will not complete the assignment to pFile.
// Thus, our clean-up code needs to test for NULL.
if (pFile != NULL)
{
   pFile->Close();
   delete pFile;
}         

CFile::GetPosition

Получает текущее значение указателя файла, которое можно использовать в последующих вызовах Seek.

virtual ULONGLONG GetPosition() const;

Возвращаемое значение

Указатель файла.

Пример

CFile cfile;
cfile.Open(_T("Seek_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
LONGLONG lOffset = 1000;
ULONGLONG lActual;
lActual = cfile.Seek(lOffset, CFile::begin);
ASSERT(cfile.GetPosition() == lActual);

CFile::GetStatus

Этот метод извлекает сведения о состоянии, связанные с заданным CFile экземпляром объекта или заданным путем к файлу.

BOOL GetStatus(CFileStatus& rStatus) const;

static BOOL PASCAL GetStatus(
    LPCTSTR lpszFileName,
    CFileStatus& rStatus,
    CAtlTransactionManager* pTM = NULL);

Параметры

rStatus
Ссылка на предоставленную CFileStatus пользователем структуру, которая получит сведения о состоянии. Структура CFileStatus содержит следующие поля:

  • CTime m_ctime Дата и время создания файла.

  • CTime m_mtime Дата и время последнего изменения файла.

  • CTime m_atime Дата и время последнего доступа к файлу для чтения.

  • ULONGLONG m_size Логический размер файла в байтах, как сообщает команда DIR.

  • BYTE m_attribute Байт атрибута файла.

  • char m_szFullName[_MAX_PATH] Абсолютное имя файла в наборе символов Windows.

lpszFileName
Строка в кодировке Windows, которая является путем к нужному файлу. Путь может быть относительным или абсолютным, или он может содержать имя сетевого пути.

pTM
Указатель на объект CAtlTransactionManager.

Возвращаемое значение

ЗНАЧЕНИЕ TRUE, если сведения о состоянии указанного файла успешно получены; в противном случае — ЗНАЧЕНИЕ FALSE.

Замечания

Нестатическую версию GetStatus извлекает сведения о состоянии открытого файла, связанного с заданным CFile объектом. Статическую версию GetStatus получает состояние файла из заданного пути к файлу без фактического открытия файла. Эта версия полезна для тестирования наличия и доступа к файлу.

Элемент m_attribute CFileStatus структуры ссылается на набор атрибутов файла. Класс CFile предоставляет тип перечисления атрибутов , чтобы атрибуты файла можно было указать символично:

enum Attribute {
    normal =    0x00,
    readOnly =  0x01,
    hidden =    0x02,
    system =    0x04,
    volume =    0x08,
    directory = 0x10,
    archive =   0x20
    };

Пример

CFile cfile;
cfile.Open(_T("SetLength_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
ULONGLONG dwNewLength = 10000;
cfile.SetLength(dwNewLength);
CFileStatus status;
if(cfile.GetStatus(status))    // virtual member function
{
   TRACE(_T("File size = %u\n"), status.m_size);
}
TCHAR* pszFileName = _T("SetLength_File.dat");
if(CFile::GetStatus(pszFileName, status))   // static function
{
   TRACE(_T("Full file name = %s\n"), status.m_szFullName);
}

CFile::hFileNull

Определяет наличие допустимого дескриптора файла для CFile объекта.

static AFX_DATA const HANDLE hFileNull;

Замечания

Эта константа используется для определения того, имеет ли CFile объект допустимый дескриптор файла.

В следующем примере показана эта операция:

if (myFile.m_hFile != CFile::hFileNull)
   ;//perform operations on the file
else
   ;//indicate the presence of an invalid handle         

CFile::LockRange

Блокирует диапазон байтов в открытом файле, вызывая исключение, если файл уже заблокирован.

virtual void LockRange(
    ULONGLONG dwPos,
    ULONGLONG dwCount);

Параметры

dwPos
Смещение байтов начала диапазона байтов для блокировки.

dwCount
Количество байтов в диапазоне для блокировки.

Замечания

Блокировка байтов в файле предотвращает доступ других процессов к этим байтам. Вы можете заблокировать несколько областей файла, но перекрывающиеся регионы не разрешены.

При разблокировке региона с помощью UnlockRange функции-члена диапазон байтов должен точно соответствовать региону, который ранее был заблокирован. Функция LockRange не объединяет смежные области. Если два заблокированных региона находятся рядом, необходимо разблокировать каждый регион отдельно.

Примечание.

Эта функция недоступна для производного CMemFileкласса.

Пример

CFile cfile;
cfile.Open(_T("LockRange_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
ULONGLONG dwPos = 10;
ULONGLONG dwCount = 100;
cfile.LockRange(dwPos, dwCount);

// do something with the file

cfile.UnlockRange(dwPos, dwCount);

CFile::m_hFile

Содержит дескриптор файла операционной системы для открытого файла.

HANDLE m_hFile;

Замечания

m_hFile — это общедоступная переменная типа UINT. Он содержит CFile::hFileNull, независимый от операционной системы индикатор пустого файла, если дескриптор не был назначен.

m_hFile Использование не рекомендуется, так как значение члена зависит от производного класса. m_hFile является общедоступным членом для удобства в поддержке неполиморфного использования класса.

CFile::m_pTM

Указатель на CAtlTransactionManager объект.

CAtlTransactionManager* m_pTM;

Замечания

CFile::Open

Перегружен. 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, определяющий режим общего доступа и общего доступа файла. Он указывает действие, которое необходимо предпринять при открытии файла. Параметры можно объединить с помощью побитового оператора OR ( | ). Требуется одно разрешение на доступ и один вариант общего доступа; Режимы modeCreate и modeNoInherit режимы являются необязательными. См. конструктор CFile для списка параметров режима.

pError
Указатель на существующий объект исключения файла, который получит состояние неудачной операции.

pTM
Указатель на объект CAtlTransactionManager.

Возвращаемое значение

Ненулевое значение, если открытое было успешным; в противном случае — 0. Параметр pError имеет смысл, только если возвращается значение 0.

Замечания

Эти две Open функции являются "безопасными" методами открытия файла, где сбой является нормальным, ожидаемым условием.

CFile Хотя конструктор создает исключение в состоянии ошибки, Open возвращает значение FALSE для условий ошибки. Open может по-прежнему инициализировать объект CFileException , чтобы описать ошибку. Если вы не предоставляете параметр pError или передаете значение NULL для pError, Open возвращает значение FALSE и не создает исключениеCFileException. Если вы передаете указатель на существующую CFileExceptionOpen и обнаруживает ошибку, функция заполняет ее сведениями, описывающими эту ошибку. Open В любом случае исключение не вызывается.

В следующей таблице описаны возможные результаты Open.

pError Обнаружена ошибка Возвращаемое значение Содержимое CFileException
NULL No TRUE Н/Д
ptr to CFileException No TRUE без изменений
NULL Да FALSE Н/Д
ptr to 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;
}

CFile::operator HANDLE

Этот оператор используется для передачи дескриптора CFile объекту в такие функции, как ReadFileEx и GetFileTime , ожидающие HANDLE.

operator HANDLE() const;

CFile::Read

Считывает данные в буфер из файла, связанного CFile с объектом.

virtual UINT Read(
    void* lpBuf,
    UINT nCount);

Параметры

lpBuf
Указатель на предоставленный пользователем буфер, который предназначен для получения данных, считываемых из файла.

nCount
Максимальное число байтов для чтения из файла. Для файлов в текстовом режиме пары канала возврата каретки считаются одними символами.

Возвращаемое значение

Количество байтов, переданных в буфер. Для всех CFile классов возвращаемое значение может быть меньше nCount , если был достигнут конец файла.

Пример

CFile cfile;
cfile.Open(_T("Write_File.dat"), CFile::modeCreate | 
   CFile::modeReadWrite);
char pbufWrite[100];
memset(pbufWrite, 'a', sizeof(pbufWrite));
cfile.Write(pbufWrite, 100);         
cfile.Flush();
cfile.SeekToBegin();
char pbufRead[100];
cfile.Read(pbufRead, sizeof(pbufRead));
ASSERT(0 == memcmp(pbufWrite, pbufRead, sizeof(pbufWrite)));

Другой пример см. в разделе CFile::Open.

CFile::Remove

Эта статическую функцию удаляет файл, указанный путем.

static void PASCAL Remove(
    LPCTSTR lpszFileName,
    CAtlTransactionManager* pTM = NULL);

Параметры

lpszFileName
Строка, которая представляет собой путь к нужному файлу. Путь может быть относительным или абсолютным и может содержать сетевое имя.

pTM
Указатель на объект CAtlTransactionManager.

Замечания

Remove не удаляет каталог.

Функция-член Remove создает исключение, если подключенный файл открыт или не удается удалить файл. Эта функция эквивалентна команде DEL.

Пример

//example for CFile::Remove
TCHAR* pFileName = _T("Remove_File.dat");
try
{
   CFile::Remove(pFileName);
}
catch (CFileException* pEx)
{
   TRACE(_T("File %20s cannot be removed\n"), pFileName);
   pEx->Delete();
}

CFile::Rename

Эта статическую функцию переименовывает указанный файл.

static void PASCAL Rename(
    LPCTSTR lpszOldName,
    LPCTSTR lpszNewName,
    CAtlTransactionManager* pTM = NULL);

Параметры

lpszOldName
Старый путь.

lpszNewName
Новый путь.

pTM
Указатель на объект CAtlTransactionManager.

Замечания

Каталоги нельзя переименовать. Эта функция эквивалентна команде REN.

Пример

TCHAR* pOldName = _T("Oldname_File.dat");
TCHAR* pNewName = _T("Renamed_File.dat");

try
{
    CFile::Rename(pOldName, pNewName);
}
catch(CFileException* pEx )
{
    TRACE(_T("File %20s not found, cause = %d\n"), pOldName, 
       pEx->m_cause);
    pEx->Delete();
}

CFile::Seek

Переместит указатель на файл в открытом файле.

virtual ULONGLONG Seek(
LONGLONG lOff,
UINT nFrom);

Параметры

lOff
Количество байтов для перемещения указателя файла. Положительные значения перемещают указатель файла в конец файла; отрицательные значения перемещают указатель файла к началу файла.

nFrom
Позиция искать. Сведения о возможных значениях см. в разделе "Примечания".

Возвращаемое значение

Позиция указателя файла, если метод выполнен успешно; в противном случае возвращаемое значение не определено, и создается указатель на CFileException исключение.

Замечания

В следующей таблице перечислены возможные значения для параметра nFrom .

значение Описание
CFile::begin Выполните поиск с начала файла.
CFile::current Поиск из текущего расположения указателя файла.
CFile::end Выполните поиск из конца файла.

При открытии файла указатель файла размещается в 0, в начале файла.

Указатель файла можно задать на позицию за пределами файла. Если это сделать, размер файла не увеличивается, пока не будет записан в файл.

Обработчик исключений для этого метода должен удалить объект исключения после обработки исключения.

Пример

CFile cfile;
cfile.Open(_T("Seek_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
LONGLONG lOffset = 1000;
ULONGLONG lActual;
lActual = cfile.Seek(lOffset, CFile::begin);

CFile::SeekToBegin

Задает значение указателя файла на начало файла.

void SeekToBegin();

Замечания

SeekToBegin() эквивалентна Seek( 0L, CFile::begin ).

Пример

CFile f;
f.Open(_T("Seeker_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
f.SeekToBegin();
ULONGLONG ullEnd = f.SeekToEnd();

CFile::SeekToEnd

Задает значение указателя файла на логический конец файла.

ULONGLONG SeekToEnd();

Возвращаемое значение

Длина файла в байтах.

Замечания

SeekToEnd() эквивалентна CFile::Seek( 0L, CFile::end ).

Пример

CFile f;
f.Open(_T("Seeker_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
f.SeekToBegin();
ULONGLONG ullEnd = f.SeekToEnd();

CFile::SetFilePath

Вызовите эту функцию, чтобы указать путь к файлу. Например, если путь к файлу недоступен при создании объекта CFile , вызов SetFilePath для его предоставления.

virtual void SetFilePath(LPCTSTR lpszNewName);

Параметры

lpszNewName
Указатель на строку, указывающую новый путь.

Замечания

Примечание.

SetFilePath не открывает файл или не создает файл; он просто связывает CFile объект с именем пути, который затем можно использовать.

Пример

TCHAR* pstrName = _T("C:\\test\\SetPath_File.dat");

// open a file
HANDLE hFile = ::CreateFile(pstrName, GENERIC_WRITE, FILE_SHARE_READ,
   NULL, CREATE_ALWAYS, 0, NULL);

if (hFile != INVALID_HANDLE_VALUE)
{
   // attach a CFile object to it
   CFile myFile(hFile);

   // At this point, myFile doesn't know the path name for the file
   // it owns because Windows doesn't associate that information
   // with the handle. Any CFileExceptions thrown by this object
   // won't have complete information.

   // Calling SetFilePath() remedies that problem by letting CFile
   // know the name of the file that's associated with the object.

   myFile.SetFilePath(pstrName);

   // write something to the file and flush it immediately
   DWORD dwValue = 1234;
   myFile.Write(&dwValue, sizeof(dwValue));
   myFile.Flush();

   // destroying the CObject here will call ::CloseHandle() on the file
} 

CFile::SetLength

Вызовите эту функцию, чтобы изменить длину файла.

virtual void SetLength(ULONGLONG dwNewLen);

Параметры

dwNewLen
Требуемая длина файла в байтах. Это значение может быть больше или меньше текущей длины файла. Файл будет расширен или усечен соответствующим образом.

Замечания

Примечание.

Эта CMemFileфункция может вызвать CMemoryException объект.

Пример

CFile cfile;
cfile.Open(_T("SetLength_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
ULONGLONG dwNewLength = 10000;
cfile.SetLength(dwNewLength);

CFile::SetStatus

Задает состояние файла, связанного с этим расположением файла.

static void PASCAL SetStatus(
    LPCTSTR lpszFileName,
    const CFileStatus& status,
    CAtlTransactionManager* pTM = NULL);

Параметры

lpszFileName
Строка, которая представляет собой путь к нужному файлу. Путь может быть относительным или абсолютным и может содержать сетевое имя.

состояние
Буфер, содержащий новые сведения о состоянии. Вызовите функцию-член, GetStatus чтобы предварительно заполнить структуру CFileStatus текущими значениями, а затем внести изменения по мере необходимости. Если значение равно 0, соответствующий элемент состояния не обновляется. Сведения о CFileStatus структуре см. в функции-члене GetStatus.

pTM
Указатель на объект CAtlTransactionManager.

Замечания

Чтобы задать время, измените m_mtime поле состояния.

При вызове SetStatus при попытке изменить только атрибуты файла, а m_mtime член структуры состояния файла является ненулевой, атрибуты также могут быть затронуты (изменение метки времени может иметь побочные эффекты для атрибутов). Если вы хотите изменить только атрибуты файла, сначала задайте m_mtime элемент структуры состояния файла равным нулю, а затем вызовите SetStatus.

Пример

TCHAR* pFileName = _T("ReadOnly_File.dat");
CFileStatus status;
CFile::GetStatus(pFileName, status);
status.m_attribute |= CFile::readOnly;
CFile::SetStatus(pFileName, status);         

CFile::UnlockRange

Разблокирует диапазон байтов в открытом файле.

virtual void UnlockRange(
    ULONGLONG dwPos,
    ULONGLONG dwCount);

Параметры

dwPos
Смещение байтов начала диапазона байтов для разблокировки.

dwCount
Количество байтов в диапазоне для разблокировки.

Замечания

Дополнительные сведения см. в описании функции-члена LockRange .

Примечание.

Эта функция недоступна для производного CMemFileкласса.

Пример

CFile cfile;
cfile.Open(_T("LockRange_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
ULONGLONG dwPos = 10;
ULONGLONG dwCount = 100;
cfile.LockRange(dwPos, dwCount);

// do something with the file

cfile.UnlockRange(dwPos, dwCount);

CFile::Write

Записывает данные из буфера в файл, связанный CFile с объектом.

virtual void Write(
    const void* lpBuf,
    UINT nCount);

Параметры

lpBuf
Указатель на предоставленный пользователем буфер, содержащий данные для записи в файл.

nCount
Количество байтов, передаваемых из буфера. Для файлов в текстовом режиме пары канала возврата каретки считаются одними символами.

Замечания

Write создает исключение в ответ на несколько условий, включая полное условие диска.

Пример

CFile cfile;
cfile.Open(_T("Write_File.dat"), CFile::modeCreate | 
   CFile::modeReadWrite);
char pbufWrite[100];
memset(pbufWrite, 'a', sizeof(pbufWrite));
cfile.Write(pbufWrite, 100);         
cfile.Flush();

См. также примеры для CFile::CFile и CFile::Open.

См. также

Пример DRAWCLI MFC
Класс CObject
Диаграмма иерархии
Класс CStdioFile
Класс CMemFile