读书人

MFC 内存储器映射

发布时间: 2013-03-01 18:33:02 作者: rapoo

MFC 内存映射
我的数据量很大,有很多很多。假设我文件中的数据是这样的。

x y1 y2 y3 ...
1 2 3 9 ...
2 1 4 5 ...

........

100 2 3 1 ....

......

假设我要提取100所在位置的数据,用内存映射的思路怎么提取啊?

LPVOID MapViewOfFile(HANDLE hFileMappingObject,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
DWORD dwNumberOfBytesToMap);

MapViewOfFile()函数允许全部或部分映射文件,在映射时,需要指定数据文件的偏移地址以及待映射的长度。其中,文件的偏移地址由DWORD型的参数dwFileOffsetHigh和dwFileOffsetLow组成的64位值来指定,而且必须是操作系统的分配粒度的整数倍,对于Windows操作系统,分配粒度固定为64KB。

我想一行一行的操作怎么办啊?


[解决办法]
这个与内存映射有什么关系,映不映射,你的逻辑都是一样的。
如果你存的是字符,那只能一行一行的(当然不是绝对一行,可以一次读取多一点)读取并判断,以便取出指定的行,如果是二进制存储的,则直接移动文件指针到相应的位置即可。
[解决办法]
不就是查询目标数据所在位置的问题吗?方法很多可以用STL也可以直接用CStudioFile类;用一个for循环逐行读取其数据,然后在每一行数据内部CString.find,返回的就是位置。
[解决办法]
用数据,坐标位置作为结构体放到list等中,然后find等

读书人网 >VC/MFC

热点推荐