我试图使用函数CreateFileMapping, MapViewOfFile, FlushViewOfFile的组合。
总缓冲区大小大于映射视图。示例缓冲区为50KB。映射视图为2KB。在这种情况下,我想用上面的函数把整个缓冲区写入一个物理文件。
第一部分我可以写入文件。但剩下的部分是如何写文件。我的意思是,如何移动到下一页,写下一部分的数据。
#define MEM_UNIT_SIZE 100
这模块……内存映射创建器
GetTempPath (256, szTmpFile);
GetTempFileName (szTmpFile, pName, 0, szMMFile);
hFile = CreateFile (szMMFile, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, NULL);
HANDLE hFileMMF = CreateFileMapping( hFile ,NULL,PAGE_READWRITE,0,
(MEM_UNIT_SIZE),pName)
第二模块……内存作家
long lBinarySize = 1000;
long lPageSize = MEM_UNIT_SIZE;
HANDLE hFileMMF = OpenFileMapping(FILE_MAP_WRITE,FALSE,pMemName);
LPVOID pViewMMFFile = MapViewOfFile(hFileMMF,FILE_MAP_WRITE,0,0, lPageSize );
CMutex mutex (FALSE, _T("Writer"));
mutex.Lock();
try
{
ASSERT(FALSE);
CopyMemory(pViewMMFFile,pBinary,lPageSize); // write
FlushViewOfFile(pViewMMFFile,lPageSize);
// first 100 bytes flushed to file.
//how to move to next location and write next 900 bytes..<---??
}
catch(CException e)
{
...
}
如果你有什么建议,请分享。提前感谢,haranadh 用不同的范围重复调用MapViewOfFile。
如以下链接所述,
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366761 (v = VS.85) . aspx
你可以检查"分配粒度",我认为你应该使用这个参数来设置"dwFileOffsetLow"或"dwFileOffsetHigh"的值