首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

CFile:Read之后,GetPosition返回值反而比Read之前的小。解决思路

2012-05-11 
CFile::Read之后,GetPosition返回值反而比Read之前的小。如题,在Read之前调用一次GetPosition(),记录值。Rea

CFile::Read之后,GetPosition返回值反而比Read之前的小。
如题,在Read之前调用一次GetPosition(),记录值。Read之后再调用一次GetPosition返回值居然比记录的值小。

代码片段如下:

CLogFile 继承自CFile

CLogFile::ReadNextMessage()
{
  DWORD dwPos1 = GetPosition(); // dwPos1==32120
  BYTE val;
  Read(&val, sizeof(val)) ; // 读取一个字节
  DWORD dwPos2 = GetPosition(); // dwPos2==32115


随机出现 dwPos2 比dwPos1 小或者相等的情况。
随机出现读一个16字节的数据(SYSTEMTIME)后,Position只增加了12.
非常的诡异!

哪位高手能帮忙解答?多谢!

[解决办法]
不知你在开始读之前,是否定位到文件头了?要么就是你已经读到结尾了?
DWORD length = Read(&val, sizeof(val)) ; // 读取一个字节
看看length返回值是什么,确实很奇怪。
[解决办法]
我直接用CFile没发现你说的问题 是否是你派生时其他地方的错误导致
[解决办法]
随机出现读一个16字节的数据(SYSTEMTIME)后,Position只增加了12,说明只读入了12个字节的有效数据,感觉你读入时候的长度控制还是有问题,查一下调用ReadNextMessage()函数的逻辑吧

[解决办法]
Read之前文件指针是不是在你所期望的位置,这个要仔细调试一下
[解决办法]
仔细调试运行

热点排行