Программирование на языке 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(), которая "сбрасывает" буфер фай­ла на устройство хранения файла.

Похожие статьи: