解压缩,压缩和读取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]

你可能感兴趣的:(Flash)