

Программирование на языке MFC
Мой второй блог в серии программирования
Метод Read
Аргументами при вызове метода служит указатель на буфер, содержимое которого должно быть записано в файл, и число записываемых в файл байтов. Как и в методе ReadQ, если число записываемых байтов равно НУЛЮ, то запись в файл не производится. После этого метод вызывает глобальную функцию WriteFileQ, при помощи которой записывает в файл указанной количество байтов. Если при записи в файл происходит ошибка, то формируется исключение.
На метод Write() накладываются те же ограничения, что и на метод Read(). Сцществует также метод WriteHuge(), исходный код которого находится в файле afx.ini:
_AFX_INLINE void CFile::WriteHuge(const void* lpBuffer,
DWORD dwCount) { Write(lpBuffer, (UINT)dwCount); }
И в этом случае разница между методами Write() и WriteHuge() будет заметна только на системах, на которых размер UlNT’a не равен размеру DWORD’a.
Еще один метод, осуществляющий запись в файл, – это метод Flush(). Его исходный код находится в файле filecore.cpp:
void CFile::Flush() {
ASSERT_VALID(this); if (m_hFile == (UINT)hFileNull) return;
if (!::FlushFileBuffers((HANDLE)m_hFile))
CFileException::ThrowOsError((LONG)::GetLastError ());
}
Здесь, очевидно, нет ничего сложного. Если у объекта нет ассоциированного с ним файла, то метод, не производя никаких действий, просто возвращает управление. В том случае, если у объекта есть ассоциированный с ним файл, то метод вызывает глобальную функцию FlushFileBuffers(), которая "сбрасывает" буфер файла на устройство хранения файла.
Похожие статьи: Метод Read
