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();
}
解压缩:
程序代码
下面是我写的解压缩,压缩和读取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]
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]
浙公网安备 33010602011771号