Windows 如果我使用MapViewOfFile读取文件的一部分,如何获取文件的下一页/部分/视图?

Windows 如果我使用MapViewOfFile读取文件的一部分,如何获取文件的下一页/部分/视图?,windows,visual-c++,android-mapview,shared-memory,memory-mapped-files,Windows,Visual C++,Android Mapview,Shared Memory,Memory Mapped Files,我正在尝试使用CreateFileMapping、MapViewOfFile和FlushViewOfFile函数的组合 总缓冲区大小大于映射视图。 示例缓冲区为50KB。映射视图为2KB。在这种情况下,, 我想使用上述函数将总缓冲区写入物理文件 第一部分我能够写入文件。但剩下的部分是如何写入文件。我的意思是,如何移动到下一页并写入下一部分数据 #define MEM_UNIT_SIZE 100 -第一个模块…内存映射创建者 GetTempPath (256, szTmpFile);

我正在尝试使用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)
{
    ...
}
long lBinarySize=1000;
长lPageSize=内存单元大小;
HANDLE hFileMMF=OpenFileMapping(FILE\u MAP\u WRITE,FALSE,pMemName);
LPVOID pViewMMFFile=MapViewOfFile(hFileMMF,FILE\u MAP\u WRITE,0,0,lPageSize);
CMutex互斥体(FALSE,_T(“Writer”);
mutex.Lock();
尝试
{
断言(假);
CopyMemory(pViewMMFFile、pBinary、lPageSize);//写入
FlushViewOfFile(pViewMMFFile,lPageSize);
//第一个100字节刷新到文件中。

//如何移动到下一个位置并写入下一个900字节。使用不同的范围重复调用MapViewOfFile。

如以下链接所述


请检查“分配粒度”,我认为您应该使用此参数设置“dwFileOffsetLow”或“dwFileOffsetHigh”的值.

到目前为止,请发布您的代码以获取关于如何实现下一步的建议。我也发布了代码。您有什么帮助吗?我正在搜索如何使用setEndOfFile的示例代码。谢谢。我无法改进您收到的反馈from@Jeremiah真的。你知道如何让文件大小设置映射范围的上限吗?对不起,我不知道。因为e、 当我尝试时,它在第二次迭代中失败了(int n=0;n当我看到这些不受保护的系统调用,没有人关心失败的系统调用时,我记得用C编写的调试软件突然开始失败。很抱歉,再次询问,不同的范围意味着,我需要多次调用文件的mapview,或任何移动到字节数的指针。这样的事情我需要吗o do?谢谢您的回复。@HaranadhGupta如果您最初的调用没有指定文件的整个范围,您需要再次调用MapViewOfFile。对于任何合理的文件大小,我建议只映射整个文件,因为它只消耗地址空间。因为看起来这可能是一个全新的文件,您需要使用SetEndOfFile在映射视图之前,将文件扩展到适当的大小。这有帮助吗?在映射时,我无法控制指定整个文件范围。因为createFileMapping之前已经完成,而当时我不知道要映射的文件的大小。我正在给出基本大小。在这种情况下,如何使用setEndOffile。我将感谢您的帮助。我尝试了与使用MapViewOffile重复调用相同的方法。但是第二次迭代不起作用。MapViewFile在getlasterror中抛出访问冲突错误。如果可能,请提供帮助。thanks@HaranadhGupta基本上,每次要向文件添加更多内容时,请取消映射视图,然后使用Se将文件大小更改为更大,然后使用更大的文件大小重新映射视图。