修改flash文件内容

相信大家对flash头文件格式都已经比较熟悉了,我在以前的日志中也写过分析flash头文件信息的内容( http://www.roading.net/blog/article.asp?id=43).
但是,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]

转载于:https://www.cnblogs.com/savageworld/archive/2006/08/16/477979.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值