解压缩,压缩和读取flash头文件信息

swf文件在flash6以后多了压缩的选项,使用zlib压缩,有人写的zlib的链接库( http://zlibnetwrapper.sourceforge.net/),在他们的网页里面有详细的使用帮助.

下面是我写的解压缩,压缩和读取flash头文件信息的代码:

压缩:
openFileDialog1.Filter = "JPG Files|*.swf";
openFileDialog1.Title = "Select a Swf File";

if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
string fileName = Path.GetFullPath(openFileDialog1.FileName);

 FileStream fs1 = new FileStream(fileName, FileMode.Open, FileAccess.Read);
 BinaryReader r = new BinaryReader(fs1);
 byte[] writedata = r.ReadBytes((int)(fs1.Length - 1));
   
    
  
 ManagedZLib.ManagedZLib.Initialize();

string tempfile = "aaa.swf";
 FileStream fs = new FileStream(tempfile, FileMode.OpenOrCreate);

 byte[] writefiledata = new byte[8];
 writefiledata[0] = Convert.ToByte('C');
 for(int i=1;i<8;i++)
 {
 writefiledata[i] = writedata[i];
 }
 fs.Write(writefiledata,0,8);

 ManagedZLib.CompressionStream zlibStream = new ManagedZLib.CompressionStream(fs, ManagedZLib.CompressionOptions.CompressBest);

 BinaryWriter zlibWriter = new BinaryWriter(zlibStream);
 zlibWriter.Write(writedata,8,writedata.Length - 8);
    
   
 zlibWriter.Close();
 zlibStream.Close();
   
    
 r.Close();
 fs1.Close();
   
  
}

解压缩:
程序代码 程序代码
FileStream stream [color=#0000ff]= new FileStream (filename , FileMode .Open , FileAccess .Read , FileShare .ReadWrite ) ;
BinaryReader reader = new BinaryReader (stream ) ;
try
{
 byte [ ] dataPart = new byte [stream .Length -8 ] ;
 string mark = new string (reader .ReadChars (3 ) ) ;

  if (mark = = "FWS" )
  {
  MessageBox .Show ( "已经是解压缩过的文件" ) ;
   return ;
  }

  int version = Convert .ToInt32 (reader .ReadByte ( ) ) ;
  int fileLength = reader .ReadInt32 ( ) ;
 reader .Read (dataPart , 0 , dataPart .Length ) ;
 
 byte [ ] savedata = new byte [fileLength ] ;

 savedata [0 ] = Convert .ToByte ( 'F' ) ;
 savedata [1 ] = Convert .ToByte ( 'W' ) ;
 savedata [2 ] = Convert .ToByte ( 'S' ) ;
 savedata [3 ] = version ;
 savedata [4 ] = Convert .ToByte (fileLength %256 ) ;
 savedata [5 ] = Convert .ToByte (fileLength /256 %256 ) ;
 savedata [6 ] = Convert .ToByte (fileLength /256 /256 %256 ) ;
 savedata [7 ] = Convert .ToByte (fileLength /256 /256 /256 %256 ) ;



 MemoryStream dataStream = new MemoryStream (dataPart ) ;
  try
  {
 
  ManagedZLib .ManagedZLib .Initialize ( ) ;
  ManagedZLib .CompressionStream zlibStream = new ManagedZLib .CompressionStream (dataStream , ManagedZLib .CompressionOptions .Decompress ) ;
  BinaryReader zlibReader = new BinaryReader (zlibStream ) ;
  
   try
   {
   byte [ ] decompressedPart = new byte [fileLength - 8 ] ;
   zlibReader .Read (decompressedPart , 0 , decompressedPart .Length ) ;
    for ( int i =8 ;i <fileLength ;i + + )
    {
    savedata [i ] = decompressedPart [i -8 ] ;
    }
   
   string FILE_NAME = Path .Combine (AppDomain .CurrentDomain .BaseDirectory ,filename ) ;
   FileStream fss = new FileStream (FILE_NAME , FileMode .OpenOrCreate ) ;
   
   BinaryWriter ww = new BinaryWriter (fss ) ;
   
   ww .Write (savedata ) ;
   ww .Close ( ) ;
   fss .Close ( ) ;


   }
  finally
   {
   zlibReader .Close ( ) ;
   zlibStream .Close ( ) ;
   ManagedZLib .ManagedZLib .Terminate ( ) ;
   }
  

  }
 finally
  {
  dataStream .Close ( ) ;
  }
}
finally
{
 reader .Close ( ) ;
 stream .Close ( ) ;
}
[/color]

转载于:https://www.cnblogs.com/savageworld/archive/2006/08/16/477978.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值