但是,flash的文件内容怎么修改呢,flash文件使用utf-8编码,所以为flash添加的数据一定要是utf-8编码的数据.
在flash文件中(本文所说的flash文件均指没有压缩过或者解压过的文件),增加flash文件中某个变量的一个byte,会引起三处的改变:
首先,文件大小个改变,文件大小的数据是flash的第4-8个字节,按照低位到高位的顺序排列.
其次,变量存储区大小改变,这个变量存储区是表明flash文件所以变量的总和.
最后,变量值的改变,也就是所要添加的数据.
下面是一个为flash内的文本增加内容的代码:
程序代码
[color=#800000]private void changeData ( int start ,byte [ ] data , int len )
{
int size1 =0 ;
int size2 =0 ;
int newsize = ( int )data [start ] + len ;
//MessageBox.Show(newsize.ToString());
if (newsize >255 )
{
size1 = newsize /255 ;
data [start ] = (byte ) (newsize %256 ) ;
if (size1 + ( int )data [start +1 ] >255 )
{
size2 = (size1 + ( int )data [start +1 ] ) /255 ;
data [start +1 ] = (byte ) ( (size1 + ( int )data [start +1 ] ) %256 ) ;
data [start +2 ] = (byte ) (size2 + ( int )data [start +2 ] ) ;
}
else
{
data [start +1 ] = (byte ) ( (size1 + ( int )data [start +1 ] ) ) ;
}
}
else
{
data [start ] = (byte )newsize ;
}
}
private void main ( )
{
string FILE_NAME = textBox1 .Text + ".swf" ;
FileStream fs ;
FileStream fs1 = new FileStream ( "1.swf" , FileMode .Open , FileAccess .Read ) ;
BinaryReader r = new BinaryReader (fs1 ) ;
byte [ ] data = r .ReadBytes ( ( int ) (fs1 .Length - 1 ) ) ;
string varname = "drawdata" ;
char [ ] varname_b = varname .ToCharArray ( ) ;
int varnamelen = varname_b .Length ;
string str = textBox2 .Text ;
//
byte [ ] str_b = new UTF8Encoding ( ) .GetBytes (str ) ;
//
int strlen = str_b .Length ;
byte [ ] data1 = new byte [data .Length + strlen ] ;
///修改文件大小
///
changeData (4 ,data ,strlen ) ;
/
///修改变量长度
for ( int i =0 ;i <data .Length -1 ;i + + )
{
if ( ( int )data [i ] = = 0xff & & ( int )data [i +1 ] = = 0xff & & ( int )data [i +2 ] = = 0xff )
{
i + =5 ;
changeData (i ,data ,strlen ) ;
break ;
}
}
///
///
int sign =0 ;
for ( int i =0 ;i <data .Length -1 ;i + + )
{
if ( ( char )data [i ] = = varname_b [0 ] )
{
int x =0 ;
for ( int j =0 ;j <varnamelen ;j + + )
{
if ( ( char )data [i +j ] = = varname_b [j ] )
{
x + + ;
}
}
if (x = = varnamelen )
{
sign = i ;
//i-=4;
changeData (i -4 ,data ,strlen ) ;
break ;
}
}
}
///
for ( int i =0 ;i <data .Length -1 ;i + + )
{
if (i < sign +varnamelen +1 )
{
data1 [i ] = data [i ] ;
}
else if (i = = sign +varnamelen +1 )
{
for ( int j =0 ;j <strlen ;j + + )
{
data1 [i +j ] = str_b [j ] ;
}
}
else
{
data1 [i +strlen ] = data [i ] ;
}
}
if (File .Exists (FILE_NAME ) )
{
//Console.WriteLine("{0} already exists!", FILE_NAME);
fs = new FileStream (FILE_NAME , FileMode .Open ) ;
//return;
}
else
{
fs = new FileStream (FILE_NAME , FileMode .CreateNew ) ;
}
BinaryWriter w = new BinaryWriter (fs ) ;
w .Write (data1 ) ;
w .Close ( ) ;
r .Close ( ) ;
}
[/color]