Re: File Mapping
От: Владимир Россия  
Дата: 31.01.02 11:49
Оценка: 15 (3)
Здравствуйте Yuri, Вы писали:

Y>Создаю отображаемый файл:

Y>HANDLE hMapFile = ::CreateFileMapping((HANDLE) -1, NULL, PAGE_READWRITE, 0, 4100, _T("My_Map_File"));
Y>Затем пишу в него:
Y> //...
Y>::WriteFile(hMapFile, &CopyData, 2000, &nbw, NULL);
Y>nbw == 0 всегда, т.е. ничего не записано!

Ессно, в файл ничего не запишется! CreateFileMapping возвращаем не дескриптор файла, а
хэндл объекта ядра — file mapping object. Для того, чтобы произвести запись в файл,
связанный с этим объектом, надо вызвать MapViewOfFileEx(hMapFile, ....).

Вот пример (из MSDN):

HANDLE hMapFile;

hMapFile = CreateFileMapping(hFile, // Current file handle.
NULL, // Default security.
PAGE_READWRITE, // Read/write permission.
0, // Max. object size.
0, // Size of hFile.
"MyFileMappingObject"); // Name of mapping object.


LPVOID lpMapAddress;
lpMapAddress = MapViewOfFile(hMapFile, // Handle to mapping object.
FILE_MAP_ALL_ACCESS, // Read/write permission
0, // Max. object size.
0, // Size of hFile.
0); // Map entire file.

lpMapAddress — указатель на память, куда отображен файл, по сути это массив DWORD'ов
А далее просто пишем в память:

DWORD dwValue;
*((LPDWORD) lpMapAddress) = dwValue

или

LPDWORD lpFile;
lpFile = (LPDWORD) lpMapAddress;
lpFile[2] = 123;
OK
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.