/// <summary> /// Reads <see cref="V8Commit.Entities.V8FileSystem.V8ContainerHeader"/> /// from <see cref="_reader"/> /// </summary> /// <returns> /// Returns <see cref="V8Commit.Entities.V8FileSystem.V8ContainerHeader"/> /// with data /// </returns> /// <permission cref="System.Security.PermissionSet">Only /// this class can access this method. /// </permission> private V8ContainerHeader ReadContainerHeader() { V8ContainerHeader container = new V8ContainerHeader(); container.RefToNextPage = _reader.ReadInt32(); container.PageSize = _reader.ReadInt32(); container.PagesCount = _reader.ReadInt32(); container.ReservedField = _reader.ReadInt32(); return(container); }
/// <summary> /// Checks the stream matching 1CV8 file /// </summary> /// <param name="stream"> /// <see cref="System.IO.MemoryStream"/>, passed by reference, /// that contains the data to be checked /// </param> /// <returns> /// Returns the result of the comparison /// <see cref="System.IO.MemoryStream"/> with file description 1CV8 /// </returns> /// <example> This sample shows how to use /// the IsV8FileSystem method from your plugin /// <code> /// /// using (FileV8Reader v8Reader = new FileV8Reader(Input)) /// { /// var fileSystem = v8Reader.ReadV8FileSystem(); /// foreach (var reference in fileSystem.References) /// { /// v8Reader.Seek(reference.RefToData, SeekOrigin.Begin); /// using (MemoryStream memStream = new MemoryStream()) /// { /// using (MemoryStream memReader = new MemoryStream(v8Reader.ReadBytes(v8Reader.ReadBlockHeader()))) /// { /// if (reference.IsInFlated) /// { /// using (DeflateStream deflateStream = new DeflateStream(memReader, CompressionMode.Decompress)) /// { /// deflateStream.CopyTo(memStream); /// } /// } /// else /// { /// memReader.CopyTo(memStream); /// } /// } /// /// if (v8Reader.IsV8FileSystem(memStream)) /// { /// // some yours сode /// } /// else /// { /// // some yours сode /// } /// } /// } /// } /// /// </code> /// </example> /// <permission cref="System.Security.PermissionSet">Everyone /// can access this method. /// </permission> public bool IsV8FileSystem(MemoryStream stream) { if (stream.Capacity < V8ContainerHeader.Size() + V8BlockHeader.Size()) { return(false); } stream.Seek(0, SeekOrigin.Begin); using (FileV8Reader tmpV8Reader = new FileV8Reader(new BinaryReader(stream, Encoding.Default, true))) { try { tmpV8Reader.ReadContainerHeader(); tmpV8Reader.ReadBlockHeader(); } catch { return(false); } } return(true); }