C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 131 - Знакомимся CMemFile / MFC шаг за шагом / Visual C++

Шаг 131 - Знакомимся CMemFile

Класс CMemFile хорош тем, что позволяет Вам создавать файл точную копию дискового файла в смысле работы и функционирования в оперативной памяти, что позволяет значительно увеличить скорость работы. Давайте попробуем. Создадим приложение MFC AppWizard на основе диалогового окна и одной кнопки. По нажатию на неё будет создаваться файл, потом в него записываться и считываться информация. Этот класс унаследован от CFile. Вы вдумайтесь в смысл. Это очень хороший способ использования оперативной памяти. Никаких проблемм !!! типа Read или Write или Seek без размера. Круто !!!

void CTestMemDlg::OnButton1() 
{
	CMemFile cm(1024);
	char buffer[100];
	strcpy(buffer,"Hello MemFile");
	cm.Write(buffer,sizeof(buffer));
	cm.Read(buffer,sizeof(buffer));
	AfxMessageBox(buffer);
	cm.Close(); 
}
Все начинается с конструктора. Их у него несколько.
CMemFile( UINT nGrowBytes = 1024 ); 					// начальный размер
CMemFile( BYTE* lpBuffer, UINT nBufferSize, UINT nGrowBytes = 0 );	// на основе буфера
Файл автоматически открывается и поэтому использовать Open не нужно. Что будет происходить при записи в файл ?? Выделиться память стандартными средсвами, если памяти не хватит она увеличится на тот размер, который Вы установили. Выделенная память автоматически вернется системе после удаления объекта CMemFile. Второй вид конструктора немного сложнее. Вы сами выделяете память и передаете её для использования по типу файловых операций. Это тоже может быть удобно, только вся ответственость за память ляжет на Вас. Есть функции
	Attach
	Detach
Они позволяют динамично разрешать и запрешать доступ к данному файлу. Вот еще пример с использованием Seek.
void CTestMemDlg::OnButton1() 
{
	CMemFile cm(1024);
	char buffer[100];
	char buffer2[20];
	strcpy(buffer,"Hello MemFile");
	strcpy(buffer2,"Hello Buffer 2");
	cm.Write(buffer,sizeof(buffer));
	cm.Write(buffer2,sizeof(buffer2));
	cm.Read(buffer,sizeof(buffer));
	AfxMessageBox(buffer);
	cm.Read(buffer2,sizeof(buffer2));
	AfxMessageBox(buffer2);
	cm.SeekToBegin(); 
        cm.Read(buffer2,sizeof(buffer2));
	AfxMessageBox(buffer2);
	cm.Close(); 
}

Смотрите SeekToBegin устанавливает указатель в начало и потом зачитывает данные уже в buffer2 работает как с файлом.


Загрузить проект | | |
Автор Каев Артем.
[AD]