读书人

CFile:Read之后GetPosition返回值反

发布时间: 2012-05-11 12:55:37 作者: rapoo

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之前文件指针是不是在你所期望的位置,这个要仔细调试一下
[解决办法]
仔细调试运行

读书人网 >VC/MFC

热点推荐