public void Write( System.IO.FileStream stream ) { stream.WriteUInt64( CreationTime.ToEndian( Endian ) ); stream.WriteUInt32( ( FileHashArrayOffset - (uint)stream.Position ).ToEndian( Endian ) ); stream.WriteUInt32( FileHashArraySize.ToEndian( Endian ) ); stream.WriteUInt32( ( VirtualHashArrayOffset - (uint)stream.Position ).ToEndian( Endian ) ); stream.WriteUInt32( VirtualHashArraySize.ToEndian( Endian ) ); stream.WriteUInt32( ( FileArrayOffset - (uint)stream.Position ).ToEndian( Endian ) ); stream.WriteUInt32( FileArraySize.ToEndian( Endian ) ); stream.WriteUInt32( ( VirtualPackArrayOffset - (uint)stream.Position ).ToEndian( Endian ) ); stream.WriteUInt32( VirtualPackArraySize.ToEndian( Endian ) ); foreach ( var h in FileHashArray ) { stream.WriteUInt32( h.Key.ToEndian( Endian ) ); stream.WriteUInt32( h.Value.ToEndian( Endian ) ); } foreach ( var f in FileArray ) { stream.WriteUInt64( f.Filesize.ToEndian( Endian ) ); stream.WriteUInt64( f.CompressedSize.ToEndian( Endian ) ); stream.WriteUInt64( f.Offset.ToEndian( Endian ) ); stream.WriteUInt32( f.Hash.ToEndian( Endian ) ); stream.WriteAscii( f.Extension, 0x0A ); stream.WriteUInt16( f.Unknown.ToEndian( Endian ) ); } }
public void Write( System.IO.Stream stream ) { stream.WriteUInt32( Type.ToEndian( Endian ) ); bool ToZ = Type != 0x08; if ( ToZ ) { stream.WriteUInt32( Util.ToEndian( 0x0Cu, Endian ) ); } stream.WriteUInt32( ( (uint)TextList.Count ).ToEndian( Endian ) ); if ( ToZ ) { stream.WriteUInt32( ( (uint)OtherData.Count ).ToEndian( Endian ) ); foreach ( uint d in OtherData ) { stream.WriteUInt32( d.ToEndian( Endian ) ); } stream.WriteUInt32( (uint)( TextList.Count * 8 + 4 ) ); } uint pointerLocation = (uint)stream.Position; for ( int i = 0; i < TextList.Count; ++i ) { // reserve space for pointers stream.WriteUInt32( 0 ); stream.WriteUInt32( 0 ); } foreach ( SDBEntry e in TextList ) { for ( int i = 0; i < 2; ++i ) { if ( ToZ ) { stream.WriteAlign( 2 ); } uint pos = (uint)stream.Position; stream.Position = pointerLocation; stream.WriteUInt32( ( pos - pointerLocation ).ToEndian( Endian ) ); stream.Position = pos; pointerLocation += 4; stream.WriteUTF8Nullterm( i == 0 ? e.IDString : e.Text ); } } }