打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用zlib对swf压缩文件进行解压缩


                                      

在flash6.0以后的版本中,输出文件时,都提供了压缩这一选项,如果要在程序中获得flash的内容,必须对flash进行解压缩。它使用的压缩方法是zlib开放源码的压缩方法。从第9个字节开始到文件末尾全部进行了压缩,对其解压缩也是非常简单,可以使用zlib1.dll中提供的uncompress对其进行解压缩。

具体使用方法,参见zlib的官方网站:http://www.zlib.net

里面惟一需要注意的是:压缩和解压缩的缓冲区的大小,应该是实际内容大小的 1.01倍+12 个字节。否则就可能出现错误。

基本代码如下:

  CFile tmpfile;


  tmpfile.Open(filepath,CFile::modeRead);

  DWORD complen=tmpfile.GetLength();

  BYTE* header=(BYTE*)::GlobalAlloc(GPTR,8);


  BYTE* buf=(BYTE*)::GlobalAlloc(GPTR,(complen-8)*1.01+12);


  BYTE* bufd=(BYTE*)::GlobalAlloc(GPTR,(filelen-8)*1.01+12);

  tmpfile.Read(header,8);


  tmpfile.ReadHuge(buf,complen-8);

  tmpfile.Close();

  unsigned long destlen;//return the value of the destlen.

  uncompress(bufd,&destlen,buf,(complen-8)*1.01+12);

 //uncompress the swf file and return the destination file length.

  header[0]=‘F‘;//change the header indentifier.

 CString temp1,temp2;

  temp1=filepath.Left(filepath.GetLength()-4);

  temp2.Format("~%s$.swf",temp1);

  CFile filedes;

  filedes.Open(temp2,CFile::modeCreate|CFile::modeWrite);

  filedes.Write(header,8);

  filedes.Write(bufd,destlen);

  filedes.Close();

  ::GlobalFree(buf);

  ::GlobalFree(bufd);

  return temp2;

 

 

 

- 作者: ar4ever 2006年10月7日, 星期六 20:14


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
CFtpConnect 下载处理
CRC循环校验 java代码实现
UNIX环境编程学习笔记(5)
树莓派实现温度监控并控制风扇散热 | 树莓派实验室
在linux下使用c语言操作临时文件
在PHP中操作临时文件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服