紧急!!关于内存映射部分文件问题,注意是部分,要循环进行映射(50)

  • 主题发起人 主题发起人 batconv
  • 开始时间 开始时间
B

batconv

Unregistered / Unconfirmed
GUEST, unregistred user!
我的文件太大,有2.2G,进行全文件映射的话会出错,我知道MapViewOfFile()函数允许全部或部分映射文件,在映射时,需要指定数据文件的偏移地址以及待映射的长度。关键是这个偏移量如何指定?请高手帮忙。如下:dwMem:=655360;pvFile := MapViewOfFile(hFileMap, FILE_MAP_WRITE, 0, 0, dwMem) ; // 映射到内存如果将上面代码加入循环,会反复读取前655360字节,我不会指定第3、第4参数偏移地址的写法。如果像 pvFile := MapViewOfFile(hFileMap, FILE_MAP_WRITE, iTmpSize, iTmpSize+dwMem, dwMem) ; 这样写会出错。请高手指教,不胜感谢。
 
怎么没人回答呢
 
你可以看看这个http://www.delphibbs.com/keylife/iblog_show.asp?xid=31369
 
把文件读入你分配的内存啊,至于循环分配,你就循环读固定字节长度大小的文件了,最后有回复到文件头Seek(File,Position);
 
MapViewOfFile(...)第三个参数iTmpSize如果被指定,表示你的文件已经超过了4G.如果你在CreateFileMap中指定的文件大小没有超过4G,那第三参数就要设为0否则返回的值就是NIL.另外,第三,四个参数所指定的偏移必须以系统内存页分配的粒度边界的整数倍,默认在XP系统中为64K.可以用GetSystemInfo来得到此信息,SYSTEM_INFO的dwAllocationGranularity即为最小粒度
 
谢谢大家,用循环读取是可行的,已解决了
 
后退
顶部