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]