Класс 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" и "Обработка файлов" в справочнике по библиотеке времени выполнения.
Иерархия наследования
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
. Если вы передаете указатель на существующую CFileException
Open
и обнаруживает ошибку, функция заполняет ее сведениями, описывающими эту ошибку. 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