各位技术大拿好!我最近在做OTA数据传输,在开发代码传输zip包时,使用Visual studio编写的dll软件来读取压缩包数据,再通过TCP/IP发送出去;dll中读取文件使用的是std::ios::binary方法,发现读到的zip压缩包数据,和用UltralEdit打开的压缩包源数据不一致,把读到的数据保存为文件,可以解压,但是报头部错误;请问大家了解这是什么原因吗?期待大拿的解答,谢谢!祝好!
dll的代码如下:
long CAPLEXPORT far CAPLPASCAL getFileData(char* binFile, char* dataBuf, long offset, long expSize)
{
int i = 0;
long realSize = 0;
ifstream fin(binFile, std::ios::binary);
fin.seekg(offset, ios::cur);
fin.read(dataBuf, expSize);
realSize = fin.gcount();
fin.close();
return realSize;
}
附件中的图片是通过dll读取数据保存后的文件,解压时报错,但仍然可以把压缩包的数据解析出来。
fin.seekg(offset, ios::cur)改成fin.seekg(offset, ios::beg),没看到你的调用,不能判断是不是应该从开始偏移
自己做了一个简单的文本文件压缩后,对比源数据和读取的数据,就图中圈出的地方不一样;文件太大时,对比源数据基本不一样。
应该是文件太大时分包拼装的问题,需要你再整体过一下打包和拼包过程,应该能有所发现。good luck
不知道你这个问题是否已经解决, 如果还没有解决的话: