Exemple #1
0
        /// <summary>
        /// Create a formatted byte array containing the block.
        /// </summary>
        /// <returns>Byte array.</returns>
        public byte[] ToBytes()
        {
            try
            {
                byte[] ret = CfsCommon.InitByteArray(BlockSizeBytes, 0x00);
                Buffer.BlockCopy(DataBlock.SignatureBytes, 0, ret, 0, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(ParentBlock), 0, ret, 4, 8);
                Buffer.BlockCopy(BitConverter.GetBytes(ChildBlock), 0, ret, 12, 8);
                Buffer.BlockCopy(BitConverter.GetBytes(DataLength), 0, ret, 20, 4);

                if (Data != null)
                {
                    LogDebug("ToBytes copying data of length " + Data.Length + " to position 64");
                    Buffer.BlockCopy(Data, 0, ret, 64, Data.Length);
                }

                return(ret);
            }
            catch (Exception e)
            {
                if (Logging != null)
                {
                    Logging.LogException("DataBlock", "ToBytes", e);
                }
                else
                {
                    LoggingModule.ConsoleException("DataBlock", "ToBytes", e);
                }
                throw;
            }
        }
Exemple #2
0
        /// <summary>
        /// Create a formatted byte array containing the block.
        /// </summary>
        /// <returns>Byte array.</returns>
        public byte[] ToBytes()
        {
            try
            {
                byte[] ret = CfsCommon.InitByteArray(BlockSizeBytes, 0x00);
                Buffer.BlockCopy(MetadataBlock.SignatureBytes, 0, ret, 0, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(ParentBlock), 0, ret, 4, 8);
                Buffer.BlockCopy(BitConverter.GetBytes(ChildDataBlock), 0, ret, 12, 8);
                Buffer.BlockCopy(BitConverter.GetBytes(FullDataLength), 0, ret, 20, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(LocalDataLength), 0, ret, 28, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(IsDirectory), 0, ret, 32, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(IsFile), 0, ret, 36, 4);

                if (Name.Length > 256)
                {
                    Name = Name.Substring(0, 256);
                }
                byte[] nameByteArray  = Encoding.UTF8.GetBytes(Name);
                byte[] nameBytesFixed = new byte[256];
                Buffer.BlockCopy(nameByteArray, 0, nameBytesFixed, 0, nameByteArray.Length);
                Buffer.BlockCopy(nameBytesFixed, 0, ret, 40, 256);

                byte[] tsByteArray  = Encoding.UTF8.GetBytes(CreatedUtc);
                byte[] tsBytesFixed = CfsCommon.InitByteArray(32, 0x00);
                Buffer.BlockCopy(tsByteArray, 0, tsBytesFixed, 0, tsByteArray.Length);
                Buffer.BlockCopy(tsBytesFixed, 0, ret, 296, 32);

                tsByteArray  = Encoding.UTF8.GetBytes(LastUpdateUtc);
                tsBytesFixed = CfsCommon.InitByteArray(32, 0x00);
                Buffer.BlockCopy(tsByteArray, 0, tsBytesFixed, 0, tsByteArray.Length);
                Buffer.BlockCopy(tsBytesFixed, 0, ret, 328, 32);

                if (Data != null)
                {
                    LogDebug("ToBytes copying data of length " + Data.Length + " to position 512");
                    Buffer.BlockCopy(Data, 0, ret, 512, Data.Length);
                }

                return(ret);
            }
            catch (Exception e)
            {
                if (Logging != null)
                {
                    Logging.LogException("MetadataBlock", "ToBytes", e);
                }
                else
                {
                    LoggingModule.ConsoleException("MetadataBlock", "ToBytes", e);
                }
                throw;
            }
        }