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]
posted on 2006-08-16 01:02  榻榻米  阅读(1235)  评论(0)    收藏  举报