VC:GetLastError()==1132, 指定的基址或文件偏移量没有适当对齐

VC:GetLastError()==1132, 指定的基址或文件偏移量没有适当对齐。

默认分类 2008-09-28 22:01:53 阅读214 评论0  字号: 订阅

错误代号:1132  指定的基址或文件偏移量没有适当对齐。

相关代码段:

m_Pointer = (char *)MapViewOfFile(m_hMapFile,  

   FILE_MAP_ALL_ACCESS,    

1,
   32,
   1024);

不知道为什么出现上述错误,“指定的基址或文件偏移量没有适当对齐”,怎么才算“适当对齐”?改成

m_Pointer = (char *)MapViewOfFile(m_hMapFile,  

   FILE_MAP_ALL_ACCESS,    

1,
   0,
   1024);

后,就不再出现上述错误。难道低位必须是0吗?

 

最终解决方法:

映射时,低位为0。这样一来,按我的程序要求,每次低位快填充满了的时候,直接跳到第二个块区域,这样会出现少量的磁盘空间浪费。

按照上面的映射方法,在32位系统中,每次只能映射4GB的内存区域,如果文件为5GB,就得映射两次。那么,这时候就出现了数据的不连续。比如,在0-4GB区域,我可能在最后写入一个大小400Bytes的数据单元,假设剩余250B,这样的大小不足以写入400B的数据单元,此时,将重新映射到4-5G的数据区域,并在这里写入新的数据单元,这样一来,那250B就是磁盘空间浪费了,而前一个数据单元和后一个数据单元中间将出现这250B的间隔,这就是数据不连续。

现在只能这样,倒数第二个参数设置为0。

你可能感兴趣的:(File,Access,磁盘)