Articles of 内存映射文件

C ++ MapViewOfFile失败

我正在尝试使用VS2010在Windows上存储映射文件。 我正在做一个DLL。 DLL的第一个实例很好地映射文件。 同一过程中的第二个实例 *ppvData = ::MapViewOfFile( *phMapping, FILE_MAP_READ, 0, 0, 0 ); 失败,错误“没有足够的内存可用于此命令”。 我不知道为什么会发生这种情况。 如果我映射2个不同的文件,而不是两个相同的文件,所有工作正常,所以我不相信“内存不足”的错误消息。 谢谢。 hr = MapFile(sPath, &m_hVoiceData, &m_pVoiceData,wsErr ); HRESULT CTTSEngObj::MapFile( wstring uPath, // Value that contains file path HANDLE * phMapping, // Pointer to file mapping handle void ** ppvData, // Pointer to the data wstring &uError) { HRESULT hr […]

内存映射文件和Win服务 – 找不到由服务器创build的文件

我试图创build一个内存映射文件与Windows服务,因此它可以容纳很多其他Windows应用程序可以使用的静态数据。 我的问题是,当我开始服务 – 服务可以轻松地读取和写入内存映射文件。 但是,Windows应用程序不能。 他们得到一个文件没有find错误。 使用相同的类读取和写入内存映射文件,在两个Windows应用程序中,我没有问题。 所以,我认为使用内存映射文件是正确的,但还有其他的东西 – 可能在我缺less的Windows服务的领域。 我试图添加一个访问控制,但没有帮助。 仍然没有find文件。 无可否认,我对Windows服务不是很有经验。 我试图创build简单的文件来写我的例外,但他们不是从服务创build。 至于帐户,我使用我自己的Windows帐户(我有限,本地pipe理员权限)。 我没有使用networking服务帐户,因为我需要使用我的用户帐户中embedded的凭据访问数据库。 任何想法都会很棒,因为我已经开始旋转我的轮子了。

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

我正在尝试使用函数CreateFileMapping,MapViewOfFile,FlushViewOfFile的组合。 总的缓冲区大小大于映射的视图。 示例缓冲区是50KB。 映射视图是2KB。 在这种情况下,我想使用上述函数将总缓冲区写入物理文件。 第一部分我能够写入文件。 但剩下的部分如何写入文件。 我的意思是,如何移动到下一页并写入下一部分数据。 #define MEM_UNIT_SIZE 100 – 第一个模块…内存映射创build器 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 […]