下面是我写的解压缩,压缩和读取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]