Esempio n. 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="isInflated"></param>
        /// <returns></returns>
        public List <V8FileSystemReference> ReadFileSystemReferences(bool isInflated = true)
        {
            V8BlockHeader blockHeader = ReadBlockHeader();
            Int32         dataSize    = blockHeader.DataSize;
            Int32         capacity    = (int)(dataSize / V8FileSystemReference.Size());

            byte[] bytes = ReadBytes(blockHeader);

            List <V8FileSystemReference> references = new List <V8FileSystemReference>(capacity);

            Int32 bytesReaded = 0;

            while (dataSize > bytesReaded)
            {
                V8FileSystemReference reference = ReadFileSystemReference(bytes, bytesReaded);

                // Seek to reference block header
                Seek(reference.RefToHeader, SeekOrigin.Begin);
                reference.FileHeader = ReadFileHeader(ReadBlockHeader().DataSize);
                reference.IsInFlated = isInflated;
                references.Add(reference);

                bytesReaded += V8FileSystemReference.Size();
            }

            return(references);
        }
Esempio n. 2
0
        /// <summary>
        /// Reads
        /// <see cref="V8Commit.Entities.V8FileSystem.V8FileSystemReference"/>
        /// from bytes buffer
        /// </summary>
        /// <param name="buffer">
        /// Bytes buffer, passed by reference,
        /// that contains the data to read
        /// </param>
        /// <param name="offset">
        /// Start position to read from bytes buffer
        /// </param>
        /// <returns>
        /// Returns
        /// <see cref="V8Commit.Entities.V8FileSystem.V8FileSystemReference"/>
        /// with data
        /// </returns>
        /// <permission cref="System.Security.PermissionSet">Everyone
        /// can access this method.
        /// </permission>
        public V8FileSystemReference ReadFileSystemReference(byte[] buffer, Int32 offset)
        {
            V8FileSystemReference reference = new V8FileSystemReference();

            reference.RefToHeader   = BitConverter.ToInt32(buffer, offset);
            reference.RefToData     = BitConverter.ToInt32(buffer, offset + 4);
            reference.ReservedField = BitConverter.ToInt32(buffer, offset + 8);

            return(reference);
        }
Esempio n. 3
0
        /// <summary>
        /// Writes deflated data bytes from
        /// <see cref = "V8Commit.Entities.V8FileSystem.V8FileSystemReference"/>
        /// file to <see cref="System.IO.MemoryStream"/>
        /// </summary>
        /// <param name="stream">
        /// <see cref="System.IO.MemoryStream"/>, passed by reference,
        /// in which data bytes will be placed
        /// </param>
        /// <param name="file">
        /// <see cref="V8Commit.Entities.V8FileSystem.V8FileSystemReference"/>,
        /// passed by reference, that contains references to file header and
        /// data to read from <see cref="_reader"/>
        /// </param>
        /// <example> This sample shows how to use
        /// the ReadV8FileRawData method from your plugin
        /// <code>
        ///
        /// using (FileV8Reader v8Reader = new FileV8Reader(Input))
        /// {
        ///     var fileSystem = v8Reader.ReadV8FileSystem();
        ///     foreach (var reference in fileSystem.References)
        ///     {
        ///         using (MemoryStream stream = new MemoryStream())
        ///         {
        ///             v8Reader.ReadV8FileRawData(stream, file);
        ///
        ///             // some yours сode
        ///
        ///         }
        ///     }
        /// }
        ///
        /// </code>
        /// </example>
        /// <permission cref="System.Security.PermissionSet">Everyone
        /// can access this method.
        /// </permission>
        public void ReadV8FileRawData(MemoryStream stream, V8FileSystemReference file)
        {
            Seek(file.RefToData, SeekOrigin.Begin);
            using (var tmpStream = new MemoryStream(ReadBytes(ReadBlockHeader())))
            {
                if (file.IsInFlated)
                {
                    using (var deflateStream = new DeflateStream(tmpStream, CompressionMode.Decompress))
                    {
                        deflateStream.CopyTo(stream);
                    }
                }
                else
                {
                    tmpStream.CopyTo(stream);
                }

                stream.Seek(0, SeekOrigin.Begin);
            }
        }